美文网首页
05 走楼梯(递归)

05 走楼梯(递归)

作者: _Mirage | 来源:发表于2020-07-23 20:05 被阅读0次

    题目大意是有n阶楼梯,可以一次走两级,也可以一次走n级。问走到第n阶一共有多少走法。

    分析: 这种递归题目一般都是要先分析状态转移的过程。
    首先边界条件: n = 1 只有一种走法 n = 2 有两种走法。
    转移方程: 因为第n阶楼梯只可能由第n-2阶或者第n-1阶走到,则f(n) = f(n - 1) + f(n - 2)

    搞清楚了边界条件和状态转移方程后编写程序:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    typedef long long ll;
    
    int dp[45];
    
    int get_steps(int n) {
        if (n == 1) return 1;
        else if (n == 2) return 2;
        if (dp[n]) return dp[n];
        return dp[n] = get_steps(n - 1) + get_steps(n - 2);
    }
    
    void solve(int n) {
        printf("%d", get_steps(n));
    }
    
    int main(int argc, char const *argv[])
    {
        int n;
        scanf("%d", &n);
        solve(n);
    
        return 0;
    }
    

    注意程序使用了dp数组(动态规划)来优化内存。

    运行结果: image.png

    相关文章

      网友评论

          本文标题:05 走楼梯(递归)

          本文链接:https://www.haomeiwen.com/subject/ppxklktx.html