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

Python类中带self的递归函数使用及斐波那契实现问题

类内递归实现斐波那契数列的问题与通用指南

问题场景

我尝试用Python递归求解斐波那契数列,要求代码遵循以下类结构:

class Solution:
    def fib(self, n: int) -> int:
    # code here recursively utilizing fib(arg1,arg2)

我的尝试代码:

class Solution:
    def fib(self, n: int) -> int:
       if n == 0 :
           return n
       if n == 1 or n==2 : 
           return 1
       return fib(fib,n-1) + fib(fib,n-2)

运行时出现错误:

NameError: name 'fib' is not defined
    return fib(fib,n-1) + fib(fib,n-2)
Line 7 in fib (Solution.py)
    ret = Solution().fib(param_1)
Line 33 in _driver (Solution.py)
    _driver()
Line 44 in <module> (Solution.py)

我需要一份Python类内递归的通用使用指南,方便后续开发时参考。


问题修复与通用指南

一、先修复你的斐波那契代码

类中的实例方法必须通过self来调用自身,你错误地直接写了fib,Python会将其当作全局函数查找,自然找不到。正确代码如下:

class Solution:
    def fib(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1 or n == 2:
            return 1
        # 通过self调用自身方法实现递归
        return self.fib(n-1) + self.fib(n-2)

二、Python类内递归通用指南

1. 实例方法的递归调用

  • 类中的实例方法(带self参数)必须通过self.方法名()来递归调用,因为方法属于当前实例对象,self代表实例本身。
  • 错误示例:直接写方法名(),会触发NameError。
  • 正确示例:self.my_method(参数)

2. 类方法的递归调用

如果是用@classmethod装饰的类方法,需要通过cls参数调用自身(cls代表当前类):

class MyClass:
    @classmethod
    def class_method(cls, num):
        if num <= 0:
            return 0
        return num + cls.class_method(num - 1)

3. 静态方法的递归调用

静态方法(@staticmethod)没有self或cls参数,递归时需要直接写类名+方法名:

class MyClass:
    @staticmethod
    def static_method(num):
        if num <= 0:
            return 0
        return num + MyClass.static_method(num - 1)

4. 必须明确递归终止条件

无论哪种方法,递归必须设置终止条件,否则会无限调用自身,最终引发RecursionError(栈溢出)。比如斐波那契数列中的n==0、n==1就是终止条件。

5. 可选:优化递归性能

对于存在大量重复计算的场景(比如斐波那契),可以用记忆化递归减少重复计算,比如借助lru_cache装饰器:

from functools import lru_cache

class Solution:
    @lru_cache(maxsize=None)
    def fib(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1 or n == 2:
            return 1
        return self.fib(n-1) + self.fib(n-2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:26