经典爬楼问题2021-06-22

# 小孩爬楼梯,一次可以爬1个、2个或3个台阶,问爬完10个台阶有多少种走法?
from functools import lru_cache


@lru_cache(None)
def get_climbs(n):
    """
    经典爬楼梯问题
    :param n: 总共的楼梯阶数
    :return: 一共有多少次不同的爬楼方式
    """
    if n == 1:
        return 1
    elif n == 2:
        return 2
    elif n == 3:
        return 4
    else:
        return get_climbs(n-1) + get_climbs(n-2) + get_climbs(n-3)


if __name__ == '__main__':
    print(get_climbs(10))


"""
递归的方式:
最重要的是找规律
分析思路:
三种爬楼方式:1阶-->get_climbs(1)、2阶-->get_climbs(2)、3阶-->get_climbs(3)
    爬4阶楼梯:假设第一步只上1阶,剩下三阶有get_climbs(3)爬楼方式
               假设第一步上2阶,剩下两阶有get_climbs(2)种爬楼方式
               假设第一步上3阶,剩下一阶有get_climbs(1)种爬楼方式
               于是可以得出:上4阶楼梯有:get_climbs(3)+get_climbs(2)+get_climbs(1)
               最终得出爬n阶楼梯:get_climbs(n) = get_climbs(n-1)+ get_climbs(n-2) + get_climbs(n-3)
"""

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值