08_跳臺階

題目描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。

分析:青蛙每次只有一階或者兩階兩種跳法,那麼:

  • 它可以跳1級臺階或者2級臺階,所以它上一步必定在第n-1,或者第n-2級臺階,也就是說它跳上n級臺階的跳法數是跳上n-1和跳上n-2級臺階的跳法數之和
  • f(n) = f(n-1) + f(n-2)
  • 由實際情況可知:f(1) = 1,f(2) = 2
  • 最終得出的是一個斐波那契數列:

                 |  1,n = 1

f(n)   =       |  2, n = 2

                 |  f(n-1) + f(n -2), n >2

package RecursionAndLoop;
/*
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。
求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
1種跳法 第一階:1
2種跳法 第二階:1+1 2
3種跳法 第三階:1+1+1 1+2 2+1
5種跳法 第四階:1+1+1+1 2+2 1+2+1 2+1+1 1+1+2
本質上還是斐波那契數列
 */
public class JumpFloor_08 {
    public int JumpFloor(int target) {
        if (target <= 2) {
            return target;
        }
        int start = 1;
        int end = 2;
        for(int i = 3; i <= target; i++) {
            int tmp = start + end;
            start = end;
            end = tmp;
        }
        return end;
    }
    //推薦
    public int JumpFloor1(int target) {
        if (target <= 2) {
            return target;
        }
        int sum = 1;
        int one = 1;
        for (int i = 2; i<=target; i++) {
            sum = sum + one;
            one = sum - one;
        }
        return sum;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章