美文网首页
2.9 解题实战:小白上楼梯(递归设计)

2.9 解题实战:小白上楼梯(递归设计)

作者: Aurochsy | 来源:发表于2019-03-22 14:25 被阅读0次

    Chapter2: 时间复杂度分析、递归、查找与排序

    9. 解题实战:小白上楼梯

    题目

    小白正在上楼梯,楼梯有n阶台阶,小白一次一次可以上1阶,2阶或3阶,实现一个方法,计算小白有多少种走完楼梯的方式。

    算法

    递归的解题思路:

    • 找重复

      因为一次可以上1阶,2阶或3阶,要计算到达n阶的方式,为到达n-1,n-2,n-3阶的方式之和

      1. 到达n-1阶之后,只有一种方式到达n阶,即跨1步

      2. 到达n-2阶之后,也只有一种方式到达n阶,即跨2步;跨1步到达n-1阶,再跨一步到达n阶这种方式实际上已经被包含在第1种情况里了

      3. 到达n-2阶之后,只有一种方式到达n阶,即跨3步

    • 找变化

      到达n阶的方式为到达n-1阶,n-2阶,n-3阶的方式之和

      到达n-1阶的方式为到达n-2,n-3,n-4阶的方式之和

      ....

    • 找出口

      n=0时,只有1种

      n=1时,只有1种

      n=2时,有2种

    所以设计算法如下

    int f(int n){
        if(n==0)
            return 1;
        if(n==1)
            return 1;
        if(n==2)
            return 2;
        return f(n-1)+f(n-2)+f(n-3);
    }
    

    相关文章

      网友评论

          本文标题:2.9 解题实战:小白上楼梯(递归设计)

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