一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 (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}
}