/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
//方法一
//动态规划的方式 默认0台阶,1种方法,1台阶1种方法,2台阶2种方法.....n台阶对应dp[n]种方法
// if(n < 2) return 1
// const dp = [1,1]
// for(let i = 2; i<= n; i++) {
// dp[i] = dp[i - 1] + dp[i - 2]
// }
// return dp[n]
// 递归做法超出时间限制. 不予通过
// if(n == 1) return 1
// if(n == 2) return 2
// return climbStairs(n - 1) + climbStairs(n - 2)
// 方法二
// 优化递归可以通过了
const map = new Map()
const recursionFun = (n) => {
if(n == 1) return 1
if(n == 2) return 2
if(map.get(n)) {
return map.get(n)
}else {
let result = recursionFun(n - 1) + recursionFun(n - 2)
map.set(n, result)
return result
}
}
return recursionFun(n)
// 循环的方法
// if (n == 1) return 1
// if (n == 2) return 2
// let result = 0, prePre = 1, pre = 2
// for (let i = 3; i <= n; i++) {
// result = prePre + pre
// prePre = pre
// pre = result
// }
// return result
};