LeetCode題解 => 509.斐波那契數(六十一)

斐波那契數

斐波那契數,通常用 F(n) 表示,形成的序列稱爲斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

給定 N,計算 F(N)。

輸入 輸出 解釋
2 1 F(2) = F(1) + F(0) = 1 + 0 = 1.
3 2 F(3) = F(2) + F(1) = 1 + 1 = 2.
4 3 F(4) = F(3) + F(2) = 2 + 1 = 3.

解法一(遞歸)

  • 簡介的代碼
  • 對計算機不否友好
var fib = function(N) {
    if(N == 0) return 0
    else if(N == 1) return 1
    else return fib(N-1) + fib(N-2)
};

在這裏插入圖片描述

解法二(動態規劃)

  • 所有可以遞歸的方式都可以考慮一下動態規劃~
var fib = function(N) {
    if(N === 0) return 0
    var val = [];
    for (var i = 0; i <= N; ++i) {
        val[i] = 0;
    } //長度 = 斐波那契數列要算的值
    if (N == 1 || N == 2) {
        return 1; //邊界值
    } else {
        val[1] = 1;
        val[2] = 2;
        for (var i = 3; i <= N; ++i) {
            val[i] = val[i - 1] + val[i - 2];
        } // 將每一個數字都算出來,最後即可解決,不用每一個數都想下遞歸計算
        return val[N - 1];
    }
};

在這裏插入圖片描述

解法三(遞歸變式)

function iterFib(n) {
    var last = 1;
    var nextLast = 1;
    var result = 1;
    for (var i = 2; i < n; ++i) {
        result = last + nextLast;
        nextLast = last;
        last = result;
    }
    return result;
}
發佈了251 篇原創文章 · 獲贊 31 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章