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
更改递归限制。
当我在 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
更改递归限制。