为了账号安全,请及时绑定邮箱和手机立即绑定

好人一生平安

如果改成n-1为什么会有乱码 这个是有顺序的吗 改成n-1是不是 只能算10天以后的http://img1.sycdn.imooc.com//5857d1cd0001339203990360.jpg

正在回答

2 回答

程序运行从主函数开始,然后开始执行  int num = getPeachNumber(1);  这里调用getPeachNumber(int n) 函数,并把实参1传递给形参n 。在getPeachNumber(1)函数内部,n=1,if为假,就去执行num=(getPeachNumber(n-1)-1)/2 ,这里会先计算getPeachNumber(0)[n=1,n-1=0]的值,减一后除2再赋值给num,但是程序不是到getPeachNumber(0)的值(不是递归终止条件),就会再次调用getPeachNumber(int n),这一次把n=0,判断if为假,进入else去执行num=(getPeachNumber(-1)-1)/2 ;这里再次调用getPeachNumber(-1),重复上面过程,调用getPeachNumber(-2),不断往复,最后是死循环,程序崩溃。

提示:程序递归一定要有终止条件,而且程序终止程序要能实现, 刚才这个例子,递归是n==10,程序从n==1开始,并且n朝着负方向发展,递归终止无法达到,形成死循环。 全面写也可以在getPeachNumber(int n)中加上一条:

if(n==10)

    {

       ?       //递归结束条件

    } 

else if(n<1&&n>10)               //这里发范围与实际结合的,不该有0次,超过十次,桃子吃完了。

{    printf("提示错误语句";        //自己编辑错误提示

    return 0;

}

 else  if

    {

        num = getPeachNumber(n+1)*2+2;   //这里是不应该用递归呢?

        printf("第%d天所剩桃子%d个\n", ?, ?); //天数,所剩桃子个数

    }


0 回复 有任何疑惑可以回复我~
#1

德国一个夏天的童话 提问者

非常感谢!
2017-02-07 回复 有任何疑惑可以回复我~

要求就是按照打印顺序输出啊  

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926212    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

好人一生平安

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信