0

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

这是我的代码:

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)

谢谢

4

3 回答 3

2

您将实例变量与传递给您的方法的参数混合在一起。

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

我能问一下你为什么要这样做吗?

于 2013-04-02T23:36:56.220 回答
0

如果您想要一个实际上适用于不太小的参数的阶乘,您应该执行类似的操作

def factorial(self):
    ans = 1
    loop = self.n
    while loop>0:
        ans *= loop
        loop -= 1
    return ans
于 2013-04-03T00:57:07.180 回答
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))
于 2019-08-25T13:49:59.617 回答