這個問題在這里已經有了答案: 為什么我的遞回函式回傳 None? (4 個回答) 昨天關門。
所以我試圖創建一個遞回函式,它回傳一個數字的階乘。我不能讓它回傳 y 但我不知道為什么,有人可以解釋嗎?
y = 1
def factorial(x):
global y
if x <= 1:
print(y)
return y
else:
y = y * x
factorial(x-1)
def hey(): #random funtion which can return y but factorial cant.
return y
print(factorial(3))
print(hey())
導致終端:
6 #factorial can print y
None# Cant return y
6 # Other function can return y
uj5u.com熱心網友回復:
您需要傳播回報:
def factorial(x):
global y
if x <= 1:
print(y)
return y
else:
y = y * x
return factorial(x-1)
此外,不需要使用全域變數,這是一個更簡單的解決方案:
def factorial_recursive(x):
if x <= 1:
return 1
else:
return x * factorial_recursive(x-1)
uj5u.com熱心網友回復:
您忘記了return遞回之前的內容,以及為什么要使用global變數??,這是一個沒有您的更簡單的版本y:
def factorial(x):
if x <= 1:
return 1
else:
return x * factorial(x-1)
print(factorial(3))
輸出:
6
uj5u.com熱心網友回復:
謝謝大家,我忘記宣傳回報了。我準確地使用了一個全域變數,只是為了讓事情變得更有趣,測驗,并且它起作用了。現在我理解了代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/486357.html
上一篇:為什么向這個Haskell函式提供一個空串列會導致編譯器錯誤?
下一篇:是什么導致無限遞回?(序言)
