JS写斐波那契数列的几种方法

这篇博客分享了使用JavaScript实现斐波那契数列的四种方法,包括直观思路、递归、利用记忆化减少运算量和使用ES6的generator。递归方法在数值较大时可能导致浏览器假死,而记忆化方法通过保存计算结果来优化性能。

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

自学javascript一段时间啦,刚开通了自己的csdn博客分享一些自己所学的东西。
接下来是几种使用JS写出斐波那契数列的方法。

方法1 最直观的解题思路.

    function fibonacci(n) {
        var num1= 1,num2= 1,sum;
        for(var i = 3; i <= n; i += 1) {
            sum = num1 + num2
            num1 = num2
            num2 = sum
        }
        return sum
    }
    //稍微改进一下以上的方法
    function fibonaccii(n){
        var num1=1,num2=1,num3;
        var arr=[1,1];
        for(var i=3;i<=n;i++){
            num3=num1+num2;
            num1=num2;
            num2=num3;
            arr.push(num3);
        }
        return arr;
    }

方法2 使用递归的方法, 但是当数字过大时浏览器会出现假死现象。毕竟递归需要堆栈,数字过大内存不够。

    function result(n){
        if(n==1||n==2){
            return 1
        };
        return result(n-2)+result(n-1);
    }
//同样使用递归,只不过使用了三元表达式。
    var fib=function(n){
        return n<2?n:fib(n-1)+fib(n-2);
    };
    for(var i=0;i<=10;i+=1){
        console.log(fib(i));
    }

方法3 使用“记忆”方法减少运算量。在一个数组里保存我们的储存结果,储存结果隐藏在闭包中.

    var fibonaci=function(){
        var memo=[0,1];
        var fib=function(n){
            var result=memo[n];
            if(typeof result!=='number'){
                result=fib(n-1)+fib(n-2);
            };
            return result;
        };
        return fib;
    }();
// 我们可以把这种技术推而广之
//编写一个函数来帮助我们构造带记忆功能的函数.
    var memoizer=function(memo,formula){
        var recur=function(n){
            var result=memo[n];
            if(typeof result!=='number'){
                result=formula(recur,n);
                memo[n]=result;
            };
            return result;
        };
        return recur;
    };
    var fib=memoizer([0,1],function(recur,n){
        return recur(n-1)+recur(n-2);
    })

方法4 使用ES6中的generator

    function* fib(x){
        let a=1;
        let b=1;
        let n=0;
        while(n<=x){
            yield a;
            [a,b]=[b,a+b];
            n++;
        }
    }
    console.log(fib(5));
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值