跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
1 public class Main08 { 2 3 /* 4 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级。 5 * 求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 6 */ 7 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 int num = Main08.JumpFloor(4); 11 System.out.println(num); 12 } 13 14 public static int JumpFloor(int target) { 15 if(target == 1) { 16 return 1; 17 } 18 if(target == 2) { 19 return 2; 20 } 21 22 return JumpFloor(target-1) + JumpFloor(target-2); 23 } 24 25 }
变态跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
1 /* 2 * 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求 3 * 该青蛙跳上一个n级的台阶总共有多少种跳法。 4 */ 5 6 import java.util.Scanner; 7 8 public class Main09 { 9 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 Scanner sc = new Scanner(System.in); 13 int target = sc.nextInt(); 14 int times = Main09.JumpFloorII(target); 15 System.out.println(times); 16 } 17 18 public static int JumpFloorII(int target) { 19 if(target == 0) { 20 return 0; 21 } 22 if(target == 1) { 23 return 1; 24 } 25 26 return 2*JumpFloorII(target-1); 27 } 28 29 }
这两道题目都是斐波那契数列的扩展。
跳台阶:每一次只能跳1阶或者2阶;
所以F(1) = 1;
F(2) = F(2-1) + F(2-2); ----------→ F(2-1) :青蛙第一次跳了一个台阶后的情况。 举例排列的话就是 1 x, x 为 1。 F(2-2):青蛙第一次跳了两个台阶的情况。举例排列的话就是 2 。
F(3) = F(3-1) + F(3-2); ----------→ F(3-1):青蛙第一次跳了一个台阶后的情况。F(3-2):青蛙第一次跳了两个台阶的情况。 。。。。。以此类推。
F(n) = F(n-1) + F(n-2);
变态跳台阶:每一次只能跳1阶或者2阶或者3阶.......n阶。
F(1) = 1;
F(2) = F(2-1) + F(2-2); ----------→ F(2-1) :青蛙第一次跳了一个台阶后的情况。 举例排列的话就是 1 x, x 为 1。 F(2-2):青蛙第一次跳了两个台阶的情况。举例排列的话就是 2 。
F(3) = F(3-1) + F(3-2) + F(3-3); ----------→ F(3-1):青蛙第一次跳了一个台阶后的情况。F(3-2):青蛙第一次跳了两个台阶的情况。 。。。。。以此类推。
............
F(n-1) = F(n-2) + F(n-3) + ......+ F(1) + F(0);
F(n) = F(n-1) + F(n-2) + ......+ F(1) + F(0);
根据F(n-1)的表达式和F(n) 的表达式 我们可以轻松的推出:F(n) = 2 * F(n-1); 这样就得到了 我们的迭代表达式。