我正在尝试编写一个类来使用递归来解决阶乘。
这是我的代码:
class Factorial:
def __init__(self,n):
self.n = n
def factorial(self):
if self.n == 0:
return 1
else:
return self.n * self.factorial(self.n - 1)
我叫它:
fact = Factorial(4)
fact.factorial()
我收到此错误:
Traceback (most recent call last):
File "factorial.py", line 13, in <module>
fact.factorial()
File "factorial.py", line 10, in factorial
return self.n * self.factorial(self.n - 1)
TypeError: factorial() takes exactly 1 argument (2 given)
由于
答案 0 :(得分:1)
您将实例变量与传递给方法的参数混合在一起。
factorial
应如下所示:
def factorial(self):
if self.n == 0:
return 1
else:
temp_n = self.n
self.n -= 1
return temp_n * self.factorial() # alternatively, (self.n + 1)*self.factorial()
你想1)递减n
变量,然后2)乘以n-1
的阶乘。
我可以问你为什么这样做?
答案 1 :(得分:0)
如果你想要一个实际上适用于不是很小的参数的阶乘,你应该做类似的事情
def factorial(self):
ans = 1
loop = self.n
while loop>0:
ans *= loop
loop -= 1
return ans
答案 2 :(得分:0)
我更新了您的代码,并成功运行了该代码
class Factorial:
def fact(self,n):
if n == 0:
return 1
else:
return n * self.fact(n - 1)
f = Factorial()
print(f.fact(4))