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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章