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

请问以下代码倒序输出每天所剩桃子数 为什么到1就停止 为什么不继续输出第0天第-1天-2天????求教

#include <stdio.h>
int getPeachNumber(int n)
{
    int num;    //定义所剩桃子数
    if(n==10)
    {
       return 1;      //递归结束条件
    }
    else
    {
        num = (getPeachNumber(n+1)+1)*2;   //这里是不应该用递归呢?
        printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
    }//就是这个位置  为什么编译器到所剩天数1就会自动停止 不继续0  -1  或者更小??
    return num;
}
int main()
{
    int num = getPeachNumber(1);
    printf("猴子第一天摘了:%d个桃子。\n", num);
    return 0;
}

提问者:街边七号 2017-02-23 10:19

个回答

  • 张幼安
    2017-02-27 20:46:42
    已采纳

    刚刚我又试了一下,确实是我说的那样,当改为2的时候,就算到了第二天。当然你也可以尝试看看。

  • 张幼安
    2017-02-27 20:44:37

    这里我也看了很久,个人以为是因为getPeachNumber(1).括号里面是1,表示递归基数为1,就是倒数的最后一个数,如果是2的话,应该就会最后算到第二天

  • 琴书
    2017-02-23 15:06:20

    n=10时得到getPeachNumber(n)的值有if条件可知为1,也就是不会继续向前运行,不会有getPeachNumber(n+1(11))存在

  • 慕粉娃
    2017-02-23 14:59:07

    代码中,在第十天时,输出return 1,这里的return 1,其实是指不正常结束循环,就好像有返回值的代码的最后会有return 0(表示正常结束循环),因为题目要求的是求第一天的桃子数,而如果求得是第十天就不符合题目要求,不是要求的结果,所以非正常结束。