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

博客聚焦小白上楼梯问题,即楼梯有n阶,小白一次可上1、2或3阶,求走完楼梯的方式数。采用递归算法解题,思路为找重复,到达n阶的方式是到达n - 1、n - 2、n - 3阶的方式之和;找变化,各阶方式数依此递推;找出口,n为0、1、2时分别有对应方式数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值