2 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
您的coins
單位是美分(或便士,因?yàn)槲也履褂玫氖怯㈡^),所以既然您使用amountIn - coins[i]
它們進(jìn)行表演,這意味著您的金額也是美分/便士。
因此,將您的金額更改為:
amount = 200;
值得花點(diǎn)時(shí)間考慮一下變量命名,以及它如何幫助識(shí)別甚至完全避免這個(gè)問題。術(shù)語(yǔ)“amount”和“amountIn”是不明確的。
文字中沒有任何暗示單位的內(nèi)容。因此,養(yǎng)成使變量名稱盡可能具體且明確的習(xí)慣 - 并在適當(dāng)?shù)那闆r下包含單位。
例如,如果變量被稱為“amountInPounds”,那么在寫入時(shí)錯(cuò)誤會(huì)變得更加明顯amountInPounds - coins[i]
現(xiàn)在,在更新到 之前amount = 200;
,請(qǐng)注意:
1) 將會(huì)有大量結(jié)果(200 便士、198 便士+2p),這將需要一些時(shí)間來迭代一次一便士,加上
2)您的代碼當(dāng)前編寫為遍歷每個(gè)離散的有序組合 - 例如,它將進(jìn)行計(jì)數(shù):
198“1分”+1“2分”
197“1分”+1“2分”+1“1分”
196“1分”+1“2分”+2“1分”
195“1分”+1“2分”+3“1分”等
同樣,執(zhí)行時(shí)間太多了。你想要的是不要for(int i = 0; i < coins.length; i++)
每次都從零開始,而是添加一個(gè)額外的參數(shù)combos
- 所以像這樣:
public int combos (int amountIn, int startCoin)
{
// blah ... existing code ... blah
for(int i = startCoin; i < coins.length; i++)
{
System.out.println("amountIn now is " + amountIn);
combosCount += combos(amountIn - coins[i], i);
}
最后,正如我之前所說,200 會(huì)產(chǎn)生很大的數(shù)字,您實(shí)際上無(wú)法確認(rèn)其正確性,因此請(qǐng)從可以檢查的少量數(shù)字開始。
添加回答
舉報(bào)