編程題目:
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;
}
}
}