js猴子吃桃问题函数的递归调用

问题描述:有一堆桃子不知道数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,天天如此买到第num(=10)天早上,猴子发现只剩一颗桃子了,问原来有多少桃子?

通过分析题目中字体加粗的部分我们可以得到以下有用信息:
1: 第二天的桃子的个数是第一天的桃子个数的一半减一,由此推断出第n天的桃子是第n-1天的 一半减一
(第N天的桃子+1)*2=第N-1天的桃子
2:num<=10天 早上发现只剩下一颗桃子 (这个是递归的回归点)

根据以上的两点可以假设N代表第N天的桃子个数
代码

function monkey(n){
	//先写出递归的回归点
	if(n >= 10){
			return 1;
	}
	return (monkey(n+1)+1)*2; //10天之前任意一天的
}
document.write(monkey(3));

解释:
比如求第8天的桃子的个数
	n=8  带入函数内 ,
	monkey(8) =(monkey(9)+1)*2
	monkey(9) =(monkey(10)+1)*2
	monkey(10) 此时 n=10带入函数内 触发if 碰到递归的回归点返回值是1
	monkey10  是1   那么 得到monkey9 是 (1+1)*2=4    依次类推  monkey(8)=10

做递归题:最主要的是的 1 找到关系 2找到回归点

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值