题目描述:
猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
输入
N
输出
桃子总数
样例输入
20
样例输出
1572862
思路:经典的反向递推,从第N天开始往前推,第N-1天桃子数量等于第N天桃子数量加1再乘2,设桃子数为P,P19=(P20+1)*2,依次类推
代码实现:
常规方法
import java.util.Scanner;
/**
* 猴子吃桃的问题
*/
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int sum=1;//第n天的桃子数为1
int n=scanner.nextInt();
for(int i=0;i<n-1;i++){//因为到第n天还剩一个,所以循环n-1次
sum=(sum+1)*2;//递推求出上一天是这一天的数加1乘2
}
System.out.println(sum);//输出结果
}
}
递归方法
import java.util.Scanner;
/**
* 猴子吃桃的问题
* 递归方法
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
System.out.println(f(n));
}
/**
* 递归方法
* @param n 天数
*/
public static long f(long n) {
if (n==1) return 1;
return (f(n-1)+1)*2;
}
}