昨天我和某人一起工作,让我的硬币更改算法正常工作。
在我看来,
makeChange1()
使用更改金额调用getChange1()
... getChange1()
检查amount == 0,如果是,则会打印列表amount >= current denomination
,它会将该面额添加到列表然后重复,按当前面额递减金额... amount < current denomination
,它会重复到下一个面额...(index + 1)我不明白一旦金额等于0,将再次调用getChange()
...是不是只说如果金额== 0,它会打印出列表?
if (amount == 0) {
System.out.print(total + ", ");
}
因此,正因为如此,我不确定其余的排列将如何完成...... 一张图片将会非常有用!
输入:
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);
}
}
谢谢!
答案 0 :(得分:2)
这不是else-if
,打印出列表后方法不会返回。
一旦打印出该行,它将继续
if (index + 1 < denominations.length) {
getChange1(amount, total, index+1);
}
将使用递增的索引再次调用您的函数。