问答详情
源自:5-8 递归函数(二)

好人一生平安

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

提问者:德国一个夏天的童话 2016-12-19 20:26

个回答

  • 慕后端3326841
    2017-01-10 07:35:53
    已采纳

    程序运行从主函数开始,然后开始执行  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", ?, ?); //天数,所剩桃子个数

        }


  • 苦逼程序猿
    2016-12-19 23:35:06

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