You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算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阶)

实现思路

  1. 输入校验:确保输入是整数,且在0 < n < 120范围内,否则返回友好的错误提示
  2. 高效计算:用迭代法代替递归,避免重复计算和潜在的栈溢出问题(虽然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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:05:37