算法 - js 实现斐波那契数列

213 阅读1分钟

一、什么是斐波那契数列

1、1、2、3、5、8、13、21、34......
F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)
特点:每一项的值都是前两项相加得到的

二、递归法

function fn(n) {
    if (n <= 2) {
        return 1
    };
    return fn(n - 1) + fn(n - 2);
}
console.log(fn(3))

三、尾调用优化(递归方法基础上进行尾调用优化)

function fn(n, current = 0, next = 1) {
    if (n == 0) return 0;
    if (n == 1) return next;
    return fn(n - 1, next, current + next);
}
console.log(fn(3))

四、闭包法(利用闭包特性把运算结果存储在数组里)

var fn = function () {
    let memo = [0, 1];
    let fib = function (n) {
        if (memo[n] == undefined) {
            memo[n] = fib(n - 2) + fib(n - 1)
        }
        return memo[n]
    }
    return fib;
}()

console.log(fn(3))

五、循环法

function fn(n) {
    var res1 = 1;
    var res2 = 1;
    var sum = res2;
    for (var i = 1; i < n - 1; i++) {
        sum = res1 + res2;
        res1 = res2;
        res2 = sum;
    }
    return sum;
}
console.log(fn(3))