猴子吃桃问题
题目来源:猴子吃桃
问题描述:
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
问题分析:
(1)根据题目,每天早上都吃了前一天剩下的一半零一个,且到了第N天只剩下一个桃子。根据第N天的数量,来求总的桃子数,并且每天的数量之间都有一定的关系,所以很自然的想到使用递归来解决。
(2)可以把题目倒过来想,也就是第一天摘一个,第二天先摘一个,再多摘一倍的桃子……以后每天早上都先摘一个桃子,再摘一倍的桃子。计算第N天一共有多少桃子。
(这样想的原因)假设当前有10个桃子,根据原题,第二天=10/2-1=4。那么根据第二天的4个桃子。反推第一天,(4+1)*2=10。
(3)将题目根据(2),转换后,递归出口就是 当N=1时,桃子数为1。
代码实现:
import java.util.Scanner;
public class MonkeyPeach {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()){
int day=scanner.nextInt();
System.out.println(eatPeach(day));
}
}
public static int eatPeach(int day){
if (day==1){
return 1;
}else {
return (eatPeach(day-1)+1)*2;
}
}
}