题目:
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 (n(n≤20)) 天早上起来一看,只剩下 (1) 个桃子了。请问小猴买了几个桃子?
输入格式
无
输出格式
无
输入
4
输出
22
思路
推导一下
因为我们能明眼看出来的条件就是
最后一天的条件Sn=1是一个桃子还有经历的天数
所以只能从这两个条件入手
再看一下
前一天和后一天桃子的关系
因为我们是从后往前推,Sn在左,Sn-1在右
得到Sn-1=2*Sn+2
递归:从头开始推,从最后开始返回
代码
import java.util.Scanner;
@SuppressWarnings("all")
public class Main{
static int n;//n是总共经历的天数,Sn=1
public static void main(String [] args){
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
System.out.println(hou(1));
}
public static int hou(int end) {//我们是从结果往前推因为我们只知道最后一天有一个桃子
if(end == n) {
return 1;
}
return 2*hou(end+1)+2;//递推一下,前面sn-1总是sn的2倍+2,end+1不要end++,我们传参会新开辟栈空间,传入的就是新的参数不是原来的end
}
}