递归猴子吃桃的三种解法:源码/递归/循环

猴子吃桃问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃一个,以后每天猴子都吃掉其中一半,然后再多吃一个,当到第十天时,想再吃时,猴子发现只剩下一个桃子了,问:最初一共有多少个桃子?

第二种和第三种非常简单,我就不过多的解释

第一种递归解法:一个参数

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;

  • 9
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值