算法之动态规划---》爬楼梯问题

200 阅读1分钟

题目:有n阶楼梯,每次只能上1阶或者2阶段,有多少种走法?

问题分析:如果有n个台阶,那么上到n阶,肯定是从n-1,或者n-2上来的。那么要求n个台阶的走法。
只要求出n-1个台阶的走法 + n-2个台阶的走法。
依次类推
f(n) = f(n-1) + f(n-2)
f(n-1) = f(n-2) + f(n-3)
... 
f(3) = f(2) + f(1); 
f(2) = 2; 
f(1) = 1;
// 那么首先可以用递归来实现
function getResult(n) {
    if(n === 1) {
        return 1;
    }
    else if(n === 2) {
        return 2;
    }
    else {
        return getResult(n-1) + getResult(n-2);
    }
}
// 我们知道递归可能会带来调用栈溢出的问题,可以用循环代替递归
function getResult(n) {
    if(n === 1) {
        return 1;
    } else if(n === 2) {
        return 2;
    } else {
        let fn_2 = 1;
        let fn_1 = 2;
        let fn; 
        for(let i = 3; i <= n; i++) {
            fn = fn_1 + fn_2;
            fn_2 = fn_1;
            fn_1 = fn;
        }
        return fn;
    }
}