一、遍历的方式性能更加,递归的方式代码利于阅读、简短,性能略差
二、裴波那契数定义:
· 位置0的裴波那契数为0
· 1和2的裴波那契数为1
· n(n > 2)裴波那契数为 (n-1)的裴波那契数 + (n-2)裴波那契数
三、遍历的方式
fibonacciIterative (n) { if (n < 1) { return 0 } if (n <= 2) { return 1 } let fibNMinus2 = 0 let fibNMinus1 = 1 let fibN = n for (let i = 2; i <= n; i++) { fibN = fibNMinus1 + fibNMinus2 // 更新上一次的裴波那契数(n - 2) fibNMinus2 = fibNMinus1 // 记录当前的裴波那契数(n - 1) fibNMinus1 = fibN } return fibN } console.log(fibonacciIterative(10) // 55 四、递归的方式 function fn(n) { const memo = [0, 1] function _fn(n) { if(memo[n] !== undefined){ return memo[n] } const result = _fn(n - 2) + _fn(n - 1) memo[n] = result return memo[n] } return _fn(n) } console.log(fn(10)) // 55 /* 解析 _fn(n - 1) // n的值 -> 9、8、7、6、5、4、3、2,首次的值为 memo[1] -> 1 _fn(n - 2) // n的值为v1 n的值的反转,首次的值为 memo[0] -> 0 memo[n] = result // v1 + v2 // 首次为 1 + 0 -> memo[2] = 1 return memo[n] */ console.log(fn1(10)) // 55
欢迎访问博客站:http://www.devloper.top/article/detail/0efbec70-34b8-11eb-8b91-7b988df38548
-- 希望,只有和勤奋作伴,才能如虎添翼 --