509.斐波那契数列
描述:用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等
递归:从最大数开始,不断拆解成小的数计算
方法一:暴力递归
1 /** 2 * @param {number} n 3 * @return {number} 4 */ 5 var fib = function(n) { 6 if(n<=1) { 7 return n; 8 }else{ 9 return fib(n-1)+fib(n-2); 10 } 11 };
动态规划= recursion递归 + memoization记忆化,从小数开始算起,从底层不断往上累加就可以了
1 function fibonacci(n) { 2 // 长度不够 3 if (n < 2) return n; 4 // 优化的动态规划 5 let dp0 = 0, dp1 = 1; 6 // 动态规划 7 for (let i = 2; i <= n; i++) { 8 let temp = dp0 + dp1; 9 dp0 = dp1; 10 dp1 = temp; 11 } 12 return dp1; 13 }
特征方程
1 function fibonacci(n) { 2 const sqrt5 = Math.sqrt(5); 3 const fibN = Math.pow((1+sqrt5)/2,n)-Math.pow((1-sqrt5)/2,n) 4 return Math.round(fibN/sqrt5); 5 }

浙公网安备 33010602011771号