#include <stdio.h>
int getPeachNumber(n)
{
int num; //定义所剩桃子数
if(n==10)
{
return 1; //递归结束条件
}
else
{
num = (getPeachNumber(n+1)+1)*2; //这里是不应该用递归呢?
printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
其实就是一道应用题,每天的桃子是后一天剩下桃子量的两倍还多一个,所以要想直到当天桃子量必须先知道后一天的桃子量 这也是为什么这个代码是倒着算的
并且已知到第十天的时候只剩一个桃子 所以只有算到第十天的时候才能开始解
在算到最后一步,也就是第十天的时候,之前每一天的桃子量都不知道,而是把计算下一天桃子量的函数当作前一个函数的变量
我们从头开始
第一天的桃子量是第二天剩下桃子还多一个的两倍 此时n=1
即第一天的桃子量num={[第二天的桃子量getPeachnumber(n+1=2)]+1(多一个)}*2 的两倍
然后对于第二天 来说 此时 n=2 num={[第三天的桃子量getPeachnumber(n+1=3)]+1(多一个)}*2 的两倍
在第十层之前每层都是这样循环的 但是在算到第十层之前都没有确切的数字出来
也就是算第九天的桃子量时 n=9 num={[第十天的桃子量getPeachnumber(n+1=10)]+1(多一个)}*2 的两倍
由n==10, return 1可知 对于函数getPeachnumber(n)当自变量等于10时 函数值等于1,即第十条桃子量为1
然后第九天就是num={[1]+1}*2=4
第八条是num={[4]+1}*2=10……以此类推 就出结果了
你可以想象成俄罗斯套娃
不知道有没有帮到你更好的理解