2013-04-02 31 views
-1

我想寫一個類來解決使用遞歸的階乘。在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

你只有聲明瞭'factorial'功能採取'self'說法。 –

+1

是否有任何具體的原因,你正在做這個與類而不是一個正常的功能? – jwodder

回答

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階乘。

請問爲什麼你這樣做?

+0

除了學習和探索之外,沒有特別的理由。我想建立我自己的統計引擎供人使用。 – spitfiredd

0

如果你想實際工作對於不是相當小參數的階乘,你應該這樣做

def factorial(self): 
    ans = 1 
    loop = self.n 
    while loop>0: 
     ans *= loop 
     loop -= 1 
    return ans