我曾與某人昨天從我的硬幣更改算法工作。不清楚爲什麼這個硬幣更改算法工作
在我看來是,
- 第一,
makeChange1()
電話getChange1()
與變化量... getChange1()
檢查量== 0,如果是的話,它會打印列表- 如果
amount >= current denomination
,它將添加到名單然後重複,面額減少當前面額... - 如果
amount < current denomination
,它重新出現在下一個面額...(索引+ 1)
我不明白如何,一旦量等於0 getChange()
將會再次調用......不只是說,如果量== 0,它只是打印出清單?
if (amount == 0) {
System.out.print(total + ", ");
}
因此,因爲這個我不知道是怎麼排列的其餘部分將被建成...... 的畫面將reallly幫助!
輸入:
12 cents
輸出:
[10, 1, 1], [5, 5, 1, 1], [5, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
代碼:
public void makeChange1(int amount) {
getChange1(amount, new ArrayList<Integer>(), 0);
}
public void getChange1(int amount, List<Integer> total, int index) {
int[] denominations = {25, 10, 5, 1};
if (amount == 0) {
System.out.print(total + ", ");
}
if (amount >= denominations[index]) {
total.add(denominations[index]);
getChange1(amount-denominations[index], total, index);
total.remove(total.size()-1);
}
if (index + 1 < denominations.length) {
getChange1(amount, total, index+1);
}
}
謝謝!
歡迎來到遞歸算法的世界 – 2013-05-14 15:14:02
@AsierAranbarri是的,我已經在這個世界上呆了幾個月了......我做了一個遞歸的迴文檢查器,這對我來說是完全有意義的......但是這不是。 – Growler 2013-05-14 15:15:56
這就是爲什麼這個世界非常有趣。遞歸方整夜(不允許小雞) – 2013-05-14 15:16:56