第一种:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
第二种:一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?
思路一:当n=1时,只有一种
当n=2时,有两种
当n=3时,有三种
当n=4时,有五种
不难看出,规律和斐波那契数列一样。利用递归实现很简单。
测试代码:
public static void main(String[] args) { System.out.println("请输入台阶数:"); Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.println(fun(n)); } private static int fun(int n) { //台阶为0时,返回-1 if (n <= 0){ return -1; } if (n ==1){ return 1; }else if (n ==2){ return 2; }else { return fun(n-1)+fun(n-2); } }
思路二:当n=1时,f(1)=1。
当n大于1时,归纳总结可知:跳上n级台阶,第一次跳1级的话,有f(n-1)种方法;第一次跳2级的话,有f(n-2)种方法……第一次跳n-1级的话,有f(1)种方法;直接跳n级的话,有1种方法,所以可以得到如下公式:
f(n) = f(n-1)+f(n-2)+......f(1)+1 (n≥2)
f(n-1) = f(n-2)+f(n-3)+.....f(1)+1 (n>2)
由上面两式相减可得,f(n)-f(n-1)=f(n-1),即f(n) = 2*f(n-1) (n>2)
最终结合f(1)和f(2),可以推得:f(n)=2^(n-1)
测试代码:
private static int fun1(int a) { if (a == 0){ return 0; } return a == 1 ? 1 : 2*fun1(a-1); }