java经典问题-猴子吃桃
java经典问题-猴子吃桃
题目:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
采用数学上的函数公式来解决
假设天数为n。当然是int型,不可能有小数哈
f(n)代表计算桃子的数量
根据题目提供的信息可得
1,f(10)=1,当n为10的时候,桃子还有1个
2,每天吃了一半,还不过瘾,又多吃了一个
那就好办了。
f(1) / 2 - 1 = f(2)
f(2) / 2 - 1 = f(3)
f(3) / 2 - 1 = f(4)
.
.
f(10) = 1
结束递归
套用公式就是
f(n) / 2 - 1 = f(n + 1),n为1-10的自然整数int
适合用 程序来递归计算
public class diguihouzichitao {
public static void main(String[] args) {
for(int i=10;i>=1;i--){ //for循环逐行输出第n天桃子的数量
System.out.println("猴子第"+i+"天总共有"+cacltaozi(i)+"只桃子");
}
}
//定义一个方法,命名为cacltaozi,参数n
public static int cacltaozi(int n){
if(n==10){ //n为10,程序的递归终点
return 1;
}else {
return 2*cacltaozi(n+1)+2; //递归公式 f(n)/2-1 = f(n+1)
} //转换一下就是 f(n) = 2*f(n+1)+2
}
}
运行结果
猴子第10天总共有1只桃子
猴子第9天总共有4只桃子
猴子第8天总共有10只桃子
猴子第7天总共有22只桃子
猴子第6天总共有46只桃子
猴子第5天总共有94只桃子
猴子第4天总共有190只桃子
猴子第3天总共有382只桃子
猴子第2天总共有766只桃子
猴子第1天总共有1534只桃子
Process finished with exit code 0