2017-03-03 157 views
-2

我對python完全陌生,而且在返回factorial變量時遇到了問題。我想創建一個遞歸函數。我在第12,9和7行不斷收到「分配前引用的局部變量」階乘「的錯誤。任何幫助表示讚賞。Python:返回一個變量

global userinput 
userinput = input('What integer would you like to to find a total factorial  for?') 
def recursion(counter): 
    if counter < 3: 
    factorial = 1 
    if counter <= userinput: 
    factorial = factorial * counter 
    increase = counter + 2 
    recursion(increase) 
    else: 
    return factorial 
efactorial = recursion(2) 
ofactorial = recursion(1) 
tfactorial = efactorial + ofactorial 
+0

這部分:'factorial = factorial * counter'參考'factorial'(在右邊),但它尚未設置爲數字。 – James

+0

順便說一句,數學模塊具有階乘函數 – abccd

回答

1

如果recusion功能counter超過3,則factorial將不會分配。因此,第二個表達式會觸發未分配錯誤。試試這個:

def recursion(counter): 
    if counter < 3: 
     factorial = 1 
    else: 
     factorial = xx # Any value you want 
    ... 
+0

@Brantley,這是最好的答案。 –

0

眼前的問題

其他幾個人已經指出,您使用的是你還沒有定義的局部變量(給定的值),如果輸入參數> = 3。緊接着,您使用的遞歸步驟,但隨後忽略返回值:

increase = counter + 2 
recursion(increase) 

遞歸返回一個值,但是你不能把它的任何地方。因此,你完全失去了結果。

技術

一般情況下,你用遞歸來解決簡單的問題,然後結合你的解決方案,簡單的問題的結果。 有了你給的代碼,它可能是這個樣子:

factorial = counter * recursion(counter + 2) 
return factorial 

或者乾脆

return counter * recursion(counter + 2) 

功能問題

我不知道爲什麼你分開奇數和偶數。你得到的結果並不是數學家所說的「階乘」。

常用的方法

實際階乘函數是一個常見的編程工作。規範的算法是從所需的數字開始,回到1.這是在你發佈你的問題之前你應該做的研究;顯然,你有一個不同的問題,並且你需要一個解決方案你的代碼。