跳台阶和变态跳台阶

跳台阶

题目描述

一只青蛙一次可以跳上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);   这样就得到了 我们的迭代表达式。

原文地址:https://www.cnblogs.com/strive-19970713/p/11000466.html