# 小孩爬楼梯,一次可以爬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)
"""