所以我写了一个递归算法来解决一个问题,即找出一组特定面额的“硬币”的最少数量,以达到给定的总和。该算法似乎有效,但因为它是递归的,并且在选择一个或另一个之前计算每个可能的选项,我很难想出一种方法来打印出所使用的面额。所以基本上我可以计算出可能使用的最少硬币数量,但不能计算它们是哪些硬币。这是我用来驱动它的代码和小主要方法。任何简化算法本身的建议也将受到欢迎。
public class DynamicCoinChange {
public static void main(String[] args) {
int[] denoms = {1, 6, 10, 25};
int numCoins = dynamicCoinChange(denoms, 18, 3);
System.out.println(numCoins);
}
public static int dynamicCoinChange(int[] denoms, int amt, int start) {
if (amt == 0 || start < 0) {
return 0;
} else if (amt == 1) {
return 1;
} else if (denoms[start] > amt ||
dynamicCoinChange(denoms, amt, start-1) <
(1 + dynamicCoinChange(denoms, amt-denoms[start], start)) &&
!(dynamicCoinChange(denoms, amt, start-1) == 0)) {
return dynamicCoinChange(denoms, amt, start-1);
} else {
return 1 + dynamicCoinChange(denoms,amt-denoms[start], start);
}
}
}