這是一個列印 16 的代碼,但我不明白它是如何作業的。你能解釋一下嗎?我的邏輯:如果 n = 2,回傳值 = 2*(2 1) = 6
def fun(n):
if(n == 4):
return n
else:
return 2*fun(n 1)
print(fun(2))
uj5u.com熱心網友回復:
這是遞回的基本示例,即重復呼叫自身的函式。該函式以 2 作為引數呼叫。該函式意識到引數不是4,因此到達該return 2*fun(n 1)行。所以它應該回傳 2 * fun(3),它用 3 作為引數呼叫它自己。3 仍然不是 4,所以我們2*fun(n 1)再次回傳并在 4 上呼叫它。現在,在這個函式呼叫中,n == 4,所以第三個函式呼叫回傳 4 到第二個函式呼叫。那個回傳 8 (2 4) 給第一個,第一個回傳 16 (2 8)。換句話說,您首先構建了一個遞回函式呼叫鏈,然后將其以相反的順序包裝起來。
uj5u.com熱心網友回復:
如果 n=2 則回傳值將是 2 * 2 * 4=16 ,因為您已經到達此行兩次
return 2*fun(n 1)
這就是“2 * 2”來自
當 n:=4 你回傳 n 所以你回傳 4
if(n == 4):
return n
這是 * 4 的來源
總之 2 * 2 * 4=16
希望我能幫忙:)
uj5u.com熱心網友回復:
首先,您將 2 作為引數傳遞給函式 fun()。由于 n 或 2 不等于 4(根據 if 條件),我們轉到 else 條件。所以我們得到:
return 2 * fun(n 1)
這是
return 2 * fun(2 1)
所以你再次呼叫了相同的函式,這就是遞回。現在再次將 3 作為引數傳遞給函式。3 不等于 4,這將我們帶到 else 條件,我們呼叫函式
return 2 * fun(3 1)
fun(4) 回傳 4 本身。所以我們回到上面的函式,而不是
return 2 * fun(3 1)
我們可以將其替換為
return 2 * 4 給我們 8,然后 8 回傳到我們的第一個呼叫。在這里,我們得到 2 * 8 = 16。
我已經盡力解釋了。遞回是一個令人困惑的話題。如果您仍然需要更清楚,請通過此檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/482916.html
上一篇:如何防止多列重復條目?
