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
相关产品推荐
相关产品推荐

