Python 中的阶乘程序错误

Error in Factorial Program in Python

当我在 Python 3 中执行以下代码时,出现以下错误。 谁能解释一下下面的代码有什么问题。

我知道如何使用简单函数编写阶乘程序。但我想了解以下代码中的错误。

class Factorial:
    def __init__(self):
        self.n=1
    def fact(self,n):    
        if self.n >= 1:
            return ((self.n) * (self.fact(n - 1)))
        else:
            return 1
a=Factorial()
print("4! =", a.fact(4))

错误:

RecursionError: maximum recursion depth exceeded in comparison

你永远不会改变 self.n,所以它 总是 大于或等于 1。你创建了一个无限循环。它在 __init__ 中设置为 1,因此每次测试时 self.n >= 1 都是正确的。

您不应使用局部变量 参数来跟踪阶乘函数的当前状态。任选其一。

没有参数:

class Factorial:
    def __init__(self, n):
        self.n = n
    def fact(self):
        n = self.n
        if n >= 1:
            self.n -= 1
            return n * self.fact()
        else:
            return 1

请注意,您现在将 n 的初始值传递给 class,以创建一个实例:

>>> f = Factorial(4)
>>> f.fact()
24
>>> f.n
0

这不是那么有用,因为现在实例 n 设置为 0。除非您为该属性分配不同的内容,否则再次调用 f.fact() 现在只会产生 1

这并不是真正需要 class 解决的问题。如果你传递 n 的初始值作为参数,你不需要一个实例来跟踪状态,你可以只使用一个普通的函数:

def fact(n):
    if n >= 1:
        return n * fact(n - 1)
    else:
        return 1

fact() 函数可以根据需要随时调用,n 有不同的值:

>>> fact(4)
24
>>> fact(8)
40320

您可以使用 sys.setrecursionlimit 更改递归限制。