题解 | #斐波那契数列#
斐波那契数列
https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3
function Fibonacci(n) {
return resolve2(n);
}
function resolve1(n) {
let dp = [];
dp[1] = 1;
dp[2] = 1;
for (let i = 3; i <= n; i++) {
dp[i] = dp[i - 2] + dp[i - 1];
}
return dp[n];
}
function resolve2(n) {
let first = 1, sec = 1, res = 1, i = 3;
while(i <= n) {
res = first + sec;
first = sec;
sec = res;
i++;
}
return res;
}
module.exports = {
Fibonacci: Fibonacci,
};
dp五步法:
- dp [i]数组的含义和下标的定义
- dp 递推公式
- dp 初始化
- 遍历顺序
- 打印dp数组
明确是一维还是二维,弄清dp数组的含义。
动态规划的本质就是当前状态必定是由之前的状态转变而来的,状态的流向。
斐波那契数列比较简单,运用的方法也比较多,可以递归,也可以动态规划。一维的动态规划如果不需要保存过程状态,可以使用 resolve2() 用两个变量存储必要的前两个状态即可。

查看1道真题和解析