猴子吃桃问题
猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个
第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个
以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个
等到第10天的时候发现桃子只有1个了。
需求:请问猴子第一天摘了多少个桃子?
①整体来看,每一天都是做同一个事件,典型的规律化问题,考虑递归三要素:
②递归公式: f(n) = (f(n + 1) + 1) * 2
③递归终结点:f(10) = 1
④递归方向:从f(1)到f(10)
代码如下:
public class Test01 {
/*
猴子吃桃问题
猴子第一天摘下若干桃子,当即吃了一半,觉得好不过瘾,于是又多吃了一个
第二天又吃了前天剩余桃子数量的一半,觉得好不过瘾,于是又多吃了一个
以后每天都是吃前天剩余桃子数量的一半,觉得好不过瘾,又多吃了一个
等到第10天的时候发现桃子只有1个了。
需求:请问猴子第一天摘了多少个桃子?
*/
/* 当天剩余
1 f(1)= ??? f(1)=(f(2)+1)*2
2 f(2)=f(1)/2-1
3 f(3)=f(2)/2-1
4 f(4)=f(3)/2-1
5 f(5)=f(4)/2-1 f(n)=(f(n+1)+1) * 2
6 f(6)=f(5)/2-1
7 f(7)=f(6)/2-1
8 f(8)=f(7)/2-1
9 f(9)=f(8)/2-1
10 1 = f(10)=f(9)/2-1
*/
public static void main(String[] args) {
System.out.println("第一天摘了" + getOneDay(1) + "个桃子");
}
public static int getOneDay(int n){
if (n == 10){
return 1;
}
return (getOneDay(n+1)+1) * 2;
}
}