如何计算n阶爬楼梯的可行路径数?Python程序开发任务
解决爬楼梯路径计数问题(含输入校验)
这个问题本质是斐波那契数列的典型应用场景,咱们得兼顾计算效率和输入合法性校验——毕竟n的上限到119,递归方案会有性能冗余,而且还要处理用户可能的异常输入。
问题核心逻辑
要爬到第n阶楼梯,最后一步只有两种可能:
- 从第n-1阶走1阶上来
- 从第n-2阶走2阶上来
所以路径总数满足递推公式:f(n) = f(n-1) + f(n-2)
初始条件:
f(1) = 1(只有1种走法:直接走1阶)f(2) = 2(两种走法:1+1 或 直接走2阶)
实现思路
- 输入校验:确保输入是整数,且在
0 < n < 120范围内,否则返回友好的错误提示 - 高效计算:用迭代法代替递归,避免重复计算和潜在的栈溢出问题(虽然n=119递归也能跑,但迭代的时间/空间效率更优)
Python代码实现
def count_stair_paths(n): # 直接处理最小的边界情况 if n == 1: return 1 elif n == 2: return 2 # 用迭代方式计算,避免递归的性能损耗 prev_two = 1 # 保存f(n-2)的值 prev_one = 2 # 保存f(n-1)的值 for _ in range(3, n + 1): current = prev_one + prev_two prev_two, prev_one = prev_one, current return prev_one if __name__ == "__main__": try: n = int(input("请输入楼梯阶数n(0 < n < 120):")) if not (0 < n < 120): raise ValueError("阶数必须大于0且小于120") print(f"爬到第{n}阶的路径总数为:{count_stair_paths(n)}") except ValueError as e: print(f"输入错误:{e}")
代码细节说明
- 输入处理:用
try-except捕获非整数输入的异常,同时手动校验n的范围,确保输入符合要求 - 计算逻辑:用两个变量保存前两项的结果,迭代计算当前项,空间复杂度为O(1),时间复杂度为O(n),计算119阶也能瞬间完成
- 边界处理:直接返回n=1和n=2的结果,避免不必要的循环
测试案例
- 输入
1→ 输出1 - 输入
5→ 输出8 - 输入
abc→ 提示输入错误:invalid literal for int() with base 10: 'abc' - 输入
120→ 提示输入错误:阶数必须大于0且小于120
内容的提问来源于stack exchange,提问作者ulama
相关产品推荐
相关产品推荐

