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

Python3中递归调用climbStairs函数为何报错?

问题原因分析

你的代码主要有两个问题导致报错:

1. 类方法递归调用方式错误

在Python类的实例方法里,调用自身必须通过self引用,不能直接写climbStairs(self, n-1)。这种写法会让Python把climbStairs当成全局函数,但实际上它是Solution类的成员方法,找不到全局定义就会抛出NameError。

正确的调用应该是self.climbStairs(n-1)和self.climbStairs(n-2),self是Python自动传递给实例方法的第一个参数,不需要手动传入。

2. 边界条件缺失

你只处理了n=2和n=3的情况,当n=1时会进入else分支,递归调用n-1=0和n-2=-1,最终触发无限递归,抛出RecursionError(递归深度超过Python限制)。

爬楼梯问题的正确边界应该是:

  • n=1时,只有1种爬法(直接走1步)
  • n=2时,有2种爬法(1+1或直接走2步)

修正后的递归代码

class Solution:
    def climbStairs(self, n: int) -> int:
        if n == 1:
            return 1
        if n == 2:
            return 2
        return self.climbStairs(n - 1) + self.climbStairs(n - 2)

另外,递归写法会有大量重复计算,效率很低,推荐用动态规划优化:

class Solution:
    def climbStairs(self, n: int) -> int:
        if n <= 2:
            return n
        a, b = 1, 2
        for _ in range(3, n+1):
            a, b = b, a + b
        return b

内容的提问来源于stack exchange,提问作者ClimbingStairs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:10:36