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的思想类似,为了避免后续的重复计算,需要将计算过的值保存起来,我们可以直接使用数组进行保存。

阅读剩余部分

相关阅读 >>

javascript怎么删除div节点

javascript中异步和同步的区别是什么

最完整指南 javascript 的错误处理

javascript数组什么意思

浅谈动态导入ecmascript模块的方法

javascript如何求最小值

实例详解javascript中split字符串分割函数

javascript的数据类型不包括什么

用js怎么改变css样式

javascript数据类型分为哪两类

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




打赏

取消

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

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

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

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

评论

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