使用类在python中使用factorial时出错

时间:2013-04-02 23:32:35

标签: python

我正在尝试编写一个类来使用递归来解决阶乘。

这是我的代码:

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)

由于

3 个答案:

答案 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))