猴子吃桃子问题:有一堆桃子,猴子第一天吃了一半多一个,以后每天猴子都吃其中一半再多一个,当到第10天时想再吃发现只剩1个桃子
如果使用最后一天计算的方法运算,略显复杂(个人观点,如有错误请各位指正),相反如果从第一天进行逆运算,计算到最后一天返回值为1,这种情况下所需代码更少(新人观点,感谢大家反馈,内心强大不怕喷)
这是一个方法,要用主方法调用,同时可以加一个Scanner,可以计算出任意天数桃子的数量,相对与正规的那种算法所需的代码量更少
public int peach(int day) {
if(day > 1){//天数减少到1之前,均进行下面的运算
return peach(day - 1) * 2 + 2;//简单点来说就是(n + 1) * 2
}else{
return 1;//最后一天只剩一个桃子,返回1
}
}
正规算法
if (day == 10) {
return 1;//最后一天返回1
}else if (day <= 9 && day >= 1) {
return (peach(day + 1) + 1) * 2;//一次运算前一天数量
}else{
System.out.println("day在1-10天内");
return -1;
}
}
完整代码
import java.util.Scanner;
public class Peach {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
T t = new T();
System.out.println("请输入天数");
int a = sc.nextInt();
int resPeach = t.peach(a);
System.out.println("一共吃了" + a + "天" +
"原本有" + resPeach + "个桃子");
}
}
class T {
//猴子吃桃子问题:有一堆桃子,猴子第一天吃了一半多一个,
//以后每天猴子都吃其中一半再多一个,当到第10天时想再吃发现只剩1个桃子
public int peach(int day) {
if(day > 1){//天数减少到1之前,均进行下面的运算
return peach(day - 1) * 2 + 2;//简单点来说就是(n + 1) * 2
}else{
return 1;//最后一天只剩一个桃子,返回1
}
/*
if (day == 10) {
return 1;
}else if (day <= 9 && day >= 1) {
return (peach(day + 1) + 1) * 2;
}else{
System.out.println("day在1-10天内");
return -1;
}
*/
}
}
运算结果
新手入门,很多细节没有那么清楚,如果有一些没有考虑到的地方,欢迎各位大佬指正,谢谢各位