[算法] - 不使用递归,实现斐波那契数列
2021-04-19 本文已影响0人
JackN81
https://jackniu81.github.io/2021/04/18/Algorithm-Fibonacci-numbers/
1. 斐波那契数列
斐波那契数列
:0, 1, 1, 2, 3, 5, 8, 13 ... ...
通常用 F(n) 表示,形成的序列称为 斐波那契数列
。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
敏捷开发时,我们估算Story Point
,通常就是使用斐波那契数列。
2. 解题思路
2.1. 递归
F(n) = F(n - 1) + F(n - 2), 很简单,就不谈了。
2.2. 动态规划
动态规划的思想是,记录中间计算结果,计算后面相时,根据前面保存的结果直接计算,避免重复计算。
3. Javascript 实现
/**
* @param {number} n
* @return {number}
*/
var fib = function(n) {
if(n===0)
return 0;
if(n===1)
return 1;
let arr = [0,1]
for(let i=2;i<=n;i++){
arr[i] = arr[i-1] + arr[i-2];
}
return arr[n];
};
还可以进一步优化,当前使用数组记录以及计算过的F(n),由于F(n) = F(n - 1) + F(n - 2),实际只需要记录最近的2个值即可,不需要使用数组记录全部数据。