无意中又刷到的一道经典的递归/动态规划问题,整理一下自己的解法
题目:每次爬 1 或 2 个台阶,爬上n阶有几种爬法?
1.直接递归:简单暴力,但复杂度.. 不仅会有很多重复计算,还有可能栈溢出
var climbStairs1 = function(n) {
if(n<=2){
return n;
}
return climbStairs1(n-1) + climbStairs1(n-2);
};
console.log(climbStairs1(3));
2.优化递归:使用一个Map来记录已经计算过的值,时间复杂度大大降低
var climbStairs2 = function(n,map) {
if(n<=2){
return n;
}
// 如果F(n)计算过 直接取出来
if(map.get(n)){
return map.get(n);
}else{
let value = climbStairs2(n-1,map) + climbStairs2(n-2,map);
map.set(n,value);
return value;
}
}
console.log(climbStairs2(8,new Map()));
3.动态规划:这个就没啥说的了,经典案例,比如要求走到第4阶的走法,因为