首先,我知道當我瀏覽了許多遞回問題以及 YouTube 和其他資源時,有人提出了遞回問題。我的主要問題是我是否了解它是如何作業的,或者我是否大錯特錯?
下面是代碼以及我個人如何分解它:
def rec(a): # will end when the condition is no longer greater than 0
if a > 0:
r = a rec(a - 1) # decrements -1 each time a recurse happens
print(r)
else:
r = 0
return r
print("\n\nRecursion Results are")
rec(3)
分解:
第一次呼叫:# 不是遞回,所以 -1 不適用 rec(a) = rec(3) 3 > 0,所以 r = 3 rec(3 - 1) 等于 "6" 作為 "- 1 "被忽略
第二次呼叫:#第一次遞回,所以減去 1 rec(a) = rec(2) 2 > 0,所以 r = 2 rec(2 - 1) 等于“3”
第三次呼叫:#第二次遞回,所以再次減去 1 1 > 0,所以 r = 1 rec(1 - 1) 等于“1”
由于如果數字不大于“0”并且“1”是“0”之前的最后一個數字,則遞回結束,這意味著“1”是您將獲得的最終結果作為輸出。“1”顯示第一個而“6”顯示最后的原因是因為“1”是基點或終點,而“6”是倒計時開始的位置,以“1”結束
uj5u.com熱心網友回復:
為每個步驟添加更多列印陳述句,它應該很清楚。您的函式只知道 rec(0) = 0 的答案,因此它會向下遞回直到得到結果,然后開始計算 rec(1) 的答案,等等:
def rec(a): # will end when the condition is no longer greater than 0
print(f'rec({a}) called')
if a > 0:
print(f'Compute {a} rec({a - 1})')
r = a rec(a - 1) # decrements -1 each time a recurse happens
print(f'{a} rec({a - 1}) computes to {r}')
else:
print(f'termination condition: rec({a}) computes 0')
r = 0
print(f'rec({a}) returned {r}')
return r
print("Recursion results are:")
rec(3)
輸出:
Recursion results are:
rec(3) called
Compute 3 rec(2)
rec(2) called
Compute 2 rec(1)
rec(1) called
Compute 1 rec(0)
rec(0) called
termination condition: rec(0) computes 0
rec(0) returned 0
1 rec(0) computes to 1
rec(1) returned 1
2 rec(1) computes to 3
rec(2) returned 3
3 rec(2) computes to 6
rec(3) returned 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/513461.html
上一篇:遞回為4,但預期輸出為64
