题目
问题描述】蟠桃记的故事是这样的:
有若干蟠桃,第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候一共有多少个桃子呢?
【输入形式】每组输入数据占一行,包含一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。
【输出形式】对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。
【样例输入】
2
【样例输出】
4
codding
从输入形式来看,我们要获取天数来表示第n天的时候剩应该蟠桃。
- 获取输入信息
- 判断范围1-30
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n<1||n>30){
return;
}
解析题目得,到了第n天只剩一个桃子,猴子是每天吃掉一半多一个,结果是要求最开始的桃子数。
- 有输出条件 最后一天 return 1
- 每天重复吃掉一半多一个,重复调用函数
- 最优是递归解决
- 定义一个方法自身掉用自己
- 定义出口判断 n=1,return 1
public int eatPeach(int n){
if(n==1) return 1;
return (eatPeach(n-1)+1)*2;
}
最后直接调用方法
完整code
package work007;
import java.util.Scanner;
public class peach {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
if(n<1||n>30){
return;
}
System.out.println(eatPeach(n));
}
public static int eatPeach(int n){
if(n==1) return 1;
return (eatPeach(n-1)+1)*2;
}
}