我想用遞歸方法解決硬幣更換問題。問題是這樣的:硬幣更換遞歸方法
給你不同面值的硬幣和總金額。編寫一個函數來計算構成該數量的組合的數量。
給你一定數量的硬幣。
這是我到目前爲止有:
private static int[] coins = {1,2,5};
public static void main(String[] args) {
System.out.println(count(13));
}
public static int count(int n)
{
// If n is 0 then there is 1 solution
if (n == 0)
return 1;
// If n is less than 0 then no solution exists
if (n < 0)
return 0;
return count(n - coins[0]) + count(n - coins[1]) + count(n - coins[2]);
}
當我做這個,我什麼也沒得到接近正確的組合。我認爲這個問題與迴歸,但我不明白爲什麼。在這裏,我從數量中減去硬幣並每次將它們加在一起。當它變爲0時,它返回1.
你會得到stackoverflow的錯誤,除非你改變它的一些...看着調用尾修剪,這是你存儲的方法的價值在你計算的每個值,所以當你再次調用時,您只需查看數組而不是重新計算它。 –