斐波那契实现(闭包、动态规划、递归、计算当前项是由多少个第一项第二项构成)

本文介绍了如何使用闭包和动态规划来高效实现斐波那契数列,通过存储计算过的变量避免重复计算,提高算法性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现斐波那契数列,可以通过递归和动态规划的方式实现,现在要求把计算过的变量存储起来,之后用到的时候不必重复计算,此处就用到了闭包

// 0, 1, 1, 2, 3, 5, 8...
var fib = (function() {
    var arr = [0, 1, 1];// 也必须得是3个
    return function(n){
        var res = arr[n];
        if (res) {
            return res;
        } else {
            arr[n] = fib(n-1) + fib(n-2);
            return arr[n];
        }
    }
})()

console.log(fib(2))
console.log(fib(5))


function fib(){
    var arr = [0, 1, 1];// 必须得初始化3个,两个不行 arr = [0, 1]
    return function(n){
        var res = arr[n];
        if(!res) {
            res = arr[n] = fn(n-1) + fn(n-2);
        }
        return res;
    }
}

var fn = fib();
console.log(fn(2));
console.log(fn(5))

动态规划实现

// 统计当前数字有多少个第一项,多少个第二项
// 1, 1, 2, 3, 5
function fibCount(n) {
    if (n < 0) return -1;
    let dp1 = [1, 0], dp2 = [0, 1];
    for(let i = 2; i <= n; i++) {
        dp1[i] = dp1[i-1] + dp1[i-2];
        dp2[i] = dp2[i-1] + dp2[i-2];
    }
    return [dp1[n], dp2[n]]
}

function fib(n) {
    if (n <= 1) return 1;
    let dp = [1,1]
    for(let i = 2; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}

let res = fibCount(50);
console.log(res)
console.log(res[0]+res[1])

let res1 = fib(50)
console.log(res1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值