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 }

 

 

posted @ 2021-05-20 15:14  icyyyy  阅读(119)  评论(0)    收藏  举报