JavaScript实现斐波那契数列的四种方法介绍(代码)


本文摘自PHP中文网,作者不言,侵删。

本篇文章给大家带来的内容是关于JavaScript实现斐波那契数列的四种方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

前几天面试被问到了斐波那契数列的实现以及优化的问题,当时现场卡了挺久的,现在进行一下总结(使用js实现)。

题目介绍

??斐波那契数列又被称为黄金分割数列,指的是这样的一个数列: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是正整数),请使用js实现斐波那契函数。

方法1:递归实现

??由题目中的递推受到启发,可以通过递归的方式去实现,代码如下:

1

2

3

4

5

6

7

8

function fibonacci(n){

        if(n < 0) throw new Error('输入的数字不能小于0');

        if(n==1 || n==2){

            return 1;

        }else{

            return fibonacci1(n-1) + fibonacci1(n-2);

        }

    }

优点:代码比较简洁易懂;
缺点:当数字太大时,会变得特别慢,原因是在计算F(9)时需要计算F(8)和F(7),但是在计算F(8)时要计算F(7)和F(6),这里面就会重复计算F(7),每次都重复计算会造成不必要的浪费,所以这种方法并不是很好。

方法2:使用闭包保存每次的递归值

??由方法1可知,使用普通的递归,会造成不必要的浪费,所以我们首先想到的应该是将每次产生的递归值保存下来,下次直接使用就行,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function fibonacci(n){

        if(n < 0) throw new Error('输入的数字不能小于0');

        let arr = [0,1];//在外部函数中定义数组,内部函数给数组添加值

        function calc(n){

            if(n<2){

                return arr[n];

            }

            if(arr[n] != undefined){

                return arr[n];

            }

            let data = calc(n-1) + calc(n-2);//使用data将每次递归得到的值保存起来

            arr[n] = data;//将每次递归得到的值放到数组中保存

            return data;

        }

        return calc(n);

    }

方法3:直接使用数组实现(动态规划)

??和方法2的思想类似,为了避免后续的重复计算,需要将计算过的值保存起来,我们可以直接使用数组进行保存。

阅读剩余部分

相关阅读 >>

nodejs的爬虫框架superagent

javascript中substr()和substring()之间的区别是什么?

javascript怎么实现按钮点击进行跳转

javascript中类型检查:typeof和instanceof操作符的区别

javascript怎么输出string数组

javascript如何判断节点是否存在

你需要知道的关于javascript计时器的所有内容

nodejs与javascript的区别

编写一个javascript程序来列出javascript对象的属性

javascript的console用法是什么

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...