问题描述:有一堆桃子不知道数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,天天如此买到第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找到回归点