动态规划-斐波那契数列
斐波那契数列
使用暴力解法
function fib(n) {
if(n<2) return n
return fib(n-1) + fib(n-2)
}
使用记事本的方法
我们可以使用闭包在外层函数中创建一个记事本
var fib = function(n) {
//可以使用map来充当记事本,也可以使用数组
let map = new Map()
const fibs = function (n) {
if(n<2) return n
if(map.get(n)!==undefined) return map.get(n)
map.set(n,fibs(n-1) + fibs(n-2))
return map.get(n)
}
return fibs(n)
};
使用数组当作记事本
var fib = function (n) {
let memo = new Array(n + 1).fill(0);
let dfs = (n) => {
if(n<2) return n
if (memo[n]) return memo[n];
memo[n] = dfs(n - 1) + dfs(n - 2);
return memo[n];
};
return dfs(n);
};
使用dp数组来维护
function fib(n) {
// 使用dp数组来维护
let dp = new Array(n+1).fill(0)
dp[0] = 0,dp[1]=1
for(let i =2;i<=n;i++) {
dp[i] = dp[i-2]+dp[i-1]
}
return dp[n]
}
再一步对dp进行优化
function fib(n) {
if(n<2) return n
let pre=0,cur=1
for(let i = 2;i<=n;i++) {
let tmp= pre+cur
pre = cur
cur = tmp
}
return cur
}