JS中Fibonacci数列的几种写法Bonacci数列递归定义如下:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),换句话说,就是就是Fibonacci斐波那契数列从0和1开始,后面的斐波那契数列系数就是前面两个数的相加。 常用的计算斐波那契数列的方法分为两类:递归和循环。递归方式一:普通递归 代码美观,逻辑性强。但是有一个重复计算的问题,比如:当n为5时,要计算fibonacci(4)+fibonacci(3),当n为4时,要计算fibonacci(3)+fibonacci(2),那么fibonacci(3)重复计算。运行fibonacci(50)将导致浏览器冻结。毕竟递归需要栈,数量多了内存不够用。复制代码functionfibonacci(n){if(n==1||n==2){return1};returnfibonacci(n-2)+fibonacci(n-1);}fibonacci(30)复制代码方法二:改进递归-将前两位作为参数,避免重复计算复制代码functionfibonacci(n){functionfib(n,v1,v2){如果(n==1)返回v1;如果(n==2)返回v2;elsereturnfib(n-1,v2,v1+v2)}returnfib(n,1,1)}fibonacci(30)复制代码方法三:改进递归——利用闭包特性将运算结果存储在数组var中fibonacci=function(){让备忘录=[0,1];让fib=function(n){if(memo[n]==undefined){memo[n]=fib(n-2)+fib(n-1)}returnmemo[n]}returnfib;}()fibonacci(30)复制代码方法31:改进递归——提取存储计算结果的函数function复制代码varmemoizer=function(func){letmemo=[];返回函数(n){if(memo[n]==undefined){memo[n]=func(n)}returnmemo[n]}};varfibonacci=memoizer(function(n){if(n==1||n==2){返回1};返回斐波那契数(n-2)+斐波那契数(n-1);})fibonacci(30)copycode循环方式一:commonfor循环copycodefunctionfibonacci(n){varn1=1,n2=1,sum;for(leti=2;i
