代码之家  ›  专栏  ›  技术社区  ›  KNU

如何在类内的函数(以self作为第一个参数)中使用递归

  •  0
  • KNU  · 技术社区  · 2 年前

    我试着用 递归 在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)
    

    我遇到了一个相关的问题: How to use recursion inside a class function 但我有兴趣找到一个更通用的python指南,以便将来能够在类中使用RECURSION。

    1 回复  |  直到 2 年前
        1
  •  4
  •   RomanPerekhrest    2 年前

    fib 是一个实例方法,请以正确的方式使用它:

    class Solution:
        def fib(self, n: int) -> int:
            if n == 0:
                return n
            if n <= 2:
                return 1
            return self.fib(n - 1) + self.fib(n - 2)
    
    print(Solution().fib(10))   # 55