猴子吃桃问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃一个,以后每天猴子都吃掉其中一半,然后再多吃一个,当到第十天时,想再吃时,猴子发现只剩下一个桃子了,问:最初一共有多少个桃子?
第二种和第三种非常简单,我就不过多的解释
第一种递归解法:一个参数
Monkey(int day)
if(day == 10)
{
return 1;
}
return (Monkey(day+1)+1)*2
解析
程序每次执行到if的时候,没有判断进入if,则继续递归day+1,直到第十天为止,第十天只剩一个桃子,所以返回1,到此处,递归将停止递的行为,开始归反结果
回归第九天:
return (1+1)*2
//这个1+1,第一个1,是第九天猴子吃剩下的,也就是第十天的数量,因为猴子每天都多吃一个,所以1+1,乘以2是因为猴子每天都吃掉一半
回归第八天
return (4+1)*2
第七天
return(10+1)*2
.........直到第一天的时候
结果是1534
第二种/递归
int Monkey(int day,int n)
if(day == 1)
{
return n;
}
return Monkey(day-1,(n+1)*2)
n是桃子的个数,第二种递归解法是最容易理解的,参数n是数量,day是天数
传参(第十天,剩下一个桃子)
天数day - 1 进入第九天,桃子+1乘以2,就是第九天的数量,递归直到第一天递归结束,返回总数量
第三种/循环
int n = 1;//第十天的数量
for(day = 1; day< 10; day++)
n = (n+1)*2;