街边七号
2017-02-23 10:19
#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;
}
刚刚我又试了一下,确实是我说的那样,当改为2的时候,就算到了第二天。当然你也可以尝试看看。
这里我也看了很久,个人以为是因为getPeachNumber(1).括号里面是1,表示递归基数为1,就是倒数的最后一个数,如果是2的话,应该就会最后算到第二天
n=10时得到getPeachNumber(n)的值有if条件可知为1,也就是不会继续向前运行,不会有getPeachNumber(n+1(11))存在
代码中,在第十天时,输出return 1,这里的return 1,其实是指不正常结束循环,就好像有返回值的代码的最后会有return 0(表示正常结束循环),因为题目要求的是求第一天的桃子数,而如果求得是第十天就不符合题目要求,不是要求的结果,所以非正常结束。
C语言入门
926207 学习 · 20797 问题
相似问题