编程题目:
64.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不过瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,看见只剩下一个桃子了。求第一天共摘了多少。
示例代码:
package program.calculation.exercise64;
/**
* 64.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半, 还不过瘾,又多吃了一个,
* 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
* 到第10天早上想再吃时,看见只剩下一个桃子了。求第一天共摘了多少。
* 分析:采取逆向思维的方法,从后往前推断。
*/
public class MonkeyEatPeach {
public static void main(String[] args) {
int day = 0;
System.out.println("第一种方式(循环):");
int loopPeaches = loopPeaches(day);
System.out.println("第一天猴子共摘了"+loopPeaches+"个桃子!");
System.out.println("第二种方式(递归):");
int recurPeaches = recurPeaches(day);
System.out.println("第一天猴子共摘了"+recurPeaches+"个桃子!");
}
//第一种方式:循环
private static int loopPeaches(int day) {
int peaches = 1; //最后剩下的一个桃子
for(day=10; day>0; day--) { //天数
peaches = 2*peaches+1+1;
}
return peaches;
}
//第二种方式:递归
private static int recurPeaches(int day) {
if(10 == day) {
return 1;
}else {
return recurPeaches(day+1)*2+1+1;
}
}
}