我們有這個遞回 python 程式:
def tri_recursion(k):
if(k > 0):
result = k tri_recursion(k - 1)
print(result)
else:
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
據我了解,該程式的輸出應該是:
1,3,5,7,9,11
但實際輸出是:
1,3,6,10,15,21
有人可以解釋其背后的原因嗎?這是我的理解程式將開始
k as 6, then 6 > 0 then system will call tri_recusrion(6-1)
now k is 5, then 5 > 0 then system will call tri_recusrion(5-1)
now k is 4, then 4 > 0 then system will call tri_recusrion(4-1)
now k is 5, then 3 > 0 then system will call tri_recusrion(3-1)
now k is 2, then 2 > 0 then system will call tri_recusrion(2-1)
now k is 1, then 1 > 0 then system will call tri_recusrion(1-1)
now k is 0, then 0 !> 0 condition will break
now function will start to return in reverse order:
tri_recusrion(1-1) in this case k is 1; k (1-1) prints 1
tri_recusrion(2-1) in this case k is 2; k (2-1) prints 3
tri_recusrion(3-1) in this case k is 3; k (3-1) prints 5
tri_recusrion(4-1) in this case k is 4; k (4-1) prints 7
tri_recusrion(5-1) in this case k is 5; k (5-1) prints 9
tri_recusrion(6-1) in this case k is 6; k (6-1) prints 11
uj5u.com熱心網友回復:
我先解釋一下這個函式的作用:
k是函式的引數,基本條件是whenk為0,結果為0,不列印任何內容,函式只回傳0
如果k大于 0,則程式計算 tri_recursion( k-1),將其添加到k并列印然后回傳
如果我們用引數呼叫函式k=6,它會用 呼叫同一個函式k=5,然后用k=4... 做同樣的事情,最后用 呼叫自己k=0,程式將停止呼叫自己。在該點之后,計算結果將被傳送到呼叫之前的一級,以完成該呼叫。
因此,程式到達后立即執行的步驟k=0如下。
由于k=0回傳0,結果k=1變為k 0=> 1 0,列印1并回傳它
由于k=1回傳1,結果k=2變為k 1=> 2 1,列印3并回傳它
由于k=2回傳3,結果k=3變為k 3=> 3 3,列印6并回傳它
由于k=3回傳6,結果k=4變為k 6=> 4 6,列印10并回傳它
由于k=4回傳10,結果k=5變為k 10=> 5 10,列印15并回傳它
由于k=5回傳15,結果k=6變為k 15=> 6 15,列印21并回傳它
uj5u.com熱心網友回復:
每次呼叫該函式時,它都會添加kto的當前值result。您正在列印的當前串列是1, 1 2, 1 2 3, 1 2 3 4, ...,也是1, 3, 6, 10, ...。要修復錯誤,請分別撰寫result = 1和result = 2 tri_recursion(k - 1)而不是result = 0和result = k ...。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/476143.html
