Clzypx
2023-08-08 16:38
#include <stdio.h>
int getPeachNumber(int n)
{
int num; //定义所剩桃子数
if(n==10)
{
return 1; //递归结束条件
}
else
{
printf("第%d天所剩桃子%d个\n",? ,? ); //天数,所剩桃子个数
}num = (getPeachNumber(n+1)+1)*2; // ???????????????????
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d个桃子。\n", num);
return 0;
}
最里面的小括号的“(n+1)”为递归加,即每次递归n的值+1,就是天数,为了获取第10天已知的剩余桃子数量“1”;
先算算每天没有吃桃子前剩余的桃子数量
第10天,剩余1个桃子;
第9天,剩余(1+1)*2=4个桃子;
第8天,剩余(4+1)*2=10个桃子;
第7天,剩余(10+1)*2=22个桃子;
第6天,剩余(22+1)*2=46个桃子;
....
根据条件,第10天只剩余1个桃子可以计算出第9天的桃子,
所以num = (getPeachNumber(n+1)+1)*2,使用的是“(n+1)”,是为了获取递归结束条件返回的值“return 1;”就是数值1,
所以第9天的桃子数可以计算出来sum= (getPeachNumber(9+1)+1)*2=(1+1)*2=4;
所以第8天的桃子数要根据第9天计算的数值来计算,可以计算出来sum= (getPeachNumber(8+1)+1)*2=(4+1)*2=10;
所以第7天的桃子数要根据第8天计算的数值来计算,可以计算出来sum= (getPeachNumber(7+1)+1)*2=(10+1)*2=22;
.......
所以该递归的计算过程全部过程应该是:
n=10时, num=1;
n=9时, num=(1+1)*2;
n=8时, num=((1+1)*2+1)*2;
n=7时, num=(((1+1)*2+1)*2+1)*2;
...
n=1时, num=(((((((((1+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2;
前一天的桃子树是之后一天的两倍+1
C语言入门
926020 学习 · 20793 问题
相似问题