猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多
吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?
解答:首先这是一道经典的算法题,体现了算法中的递归思想,即顺推,逆推;
找到递归公式:S10=1,S9=2(S10+1),S8=2(S9+1),......,Sn=2(Sn+1 +1)
逆推,从第九天往第一天推;
for循环
public class Monkey
{
public static void main(String[] args)
{
int peach = 1; //第十天,剩下一个桃子
System.out.println("第10天,剩下" + peach +"个桃子");
for(int i=9; i>0; i--)
{
peach = (peach +1)*2;
System.out.println("第"+i+"天,剩下" + peach +"个桃子");
}
System.out.println("第一天,总共摘下" + peach +"个桃子");
}
}
第一天,总共摘下1534个桃子"
用while 可以
public class mokey{
public class Monkey
{
public static void main(String[] args) {
int i=9;//定义day
int j=1;//定义peach
while(i>=1){
j = (j + 1)*2;
i--;
}
System.out.println(j);
}
}
}
递归,调用自身方法
public class Monkey {
/**
* 递归方法主体
*
* @param n
* @return
*/
public static Integer getTotal(Integer n) {
// 第十天只剩1个
if (n == 10) {
return 1;
}
// 每一次返回的都是(+1)*2,向内嵌套,变量永远是一个n,直到n成为一个定值
return (getTotal(n + 1) + 1) * 2;
}
public static void main(String[] args) {
// 调用方法,输入天数
// 1534个
Monkey.getTotal(1);
}
}