そこで私は、特定の金額に到達できる特定の金種セットの「コイン」の最小数を計算する問題に対して、再帰的なアルゴリズムを作成しました。アルゴリズムは機能しているように見えますが、再帰的であり、いずれかを選択する前に可能なすべてのオプションを計算するため、使用されている金種も印刷する方法を考え出すのに苦労しています. したがって、基本的に、使用可能なコインの最小数を計算できますが、どのコインであるかは計算できません。これが、コードと、それを駆動するために使用している小さなメイン メソッドです。アルゴリズム自体を合理化するための提案も大歓迎です。
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);
}
}
}