我想跟蹤M = 10,c = {5,3,1}和d = 3的硬幣更改問題的遞歸算法。 M是需要變更的貨幣的價值,c是可用的不同硬幣值,d是可用的不同硬幣值的數量。我很困惑如何追蹤它。跟蹤遞歸硬幣更改算法
RecursiveChange(M,C,d)
if M = 0
return 0
bestNumCoins <- infinity
for i -> 1 to d
if M ≥ c(i)
numCoins <- RecursiveChange(M – c(i) , c, d)
if numCoins + 1 < bestNumCoins
bestNumCoins <- numCoins + 1
return bestNumCoins
呼叫1:RecursiveChange(10,{5,3,1},3)
呼叫2:RecursiveChange(5,{ 5,3,1},3)
呼叫3:RecursiveChange(0,{5,3,1},3)
在呼叫3,0將由於M = 0返回。我明白了什麼:0被返回給調用2.然後,從呼叫2繼續進行,下面的部分是運行:
if numCoins + 1 < bestNumCoins
bestNumCoins <- numCoins + 1
return bestNumCoins
其中bestNumCoins將採取1值1這個值,然後返回到調用1然後,繼續從第一個電話號碼開始,由於numCoins + 1(即2)不是< bestNumCoins(即1),所以bestNumCoins將保持爲1,並且此值爲1將成爲最終值。首先,我認爲2應該是這裏的最終價值,因爲要獲得10個單位,需要兩個價值5的硬幣。
我需要幫助弄清楚,請。我一直在這上面花費數小時。