动态规划-斐波那契数列

斐波那契数列

使用暴力解法

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
}
posted @ 2022-10-27 16:46  含若飞  阅读(28)  评论(0编辑  收藏  举报