我想創建一個程式,以確定是否有可能用特定數量的硬幣構建一個特定的 使用遞回的特定數量的硬幣來計算總數。 例如,如果四個硬幣都是25分硬幣,就有可能得到1.00美元的總數。但是,沒有辦法用5個硬幣 總額為1.00美元的情況下,使用5個硬幣。然而,使用6個硬幣就有可能得到1美元。 3個25分硬幣,2個1角硬幣和1個5角硬幣。同樣地,用5個或8個硬幣也可以得到1.25美元的總額。 硬幣或8個硬幣,但用4個、6個或7個硬幣則不能形成1.25美元的總額。它應該顯示一個明確的資訊,說明輸入的美元數額是否可以用 是否可以用所標示的硬幣陣列成美元
。def possiblechange(total, coins)。
便士 = .01
五分 = .05: 五分 = .05
一角硬幣=.1
四分之一=.25
if coins * penny == total:
return True
elif nickel * coins == total:
return True
elif dime * coins == total:
return True
elif quarter * coins == total:
return True
else:
return (
penny*possiblechange(total, coins) or return (
5分*可能的變化(總數, 硬幣) 或 2分*可能的變化(總數, 硬幣)
一角*可能的變化(總數, 硬幣) 或 二角*可能的變化(總數, 硬幣)
四分之一*可能的變化(總數, 硬幣)
)
print(possiblechange(1.0, 3)
我在這個問題上得到了一個追蹤結果。
uj5u.com熱心網友回復:
你有幾個問題。
最大的問題是,你的代碼每次都以完全相同的引數進行遞回。這意味著如果最初的呼叫沒有被你的基礎案例之一所處理,你將永遠地遞回。你需要修改遞回呼叫的引數,因此它們所做的事情與你在當前呼叫中所做的不同。
事實上,你的遞回案例根本就沒有任何意義。你的函式應該回傳True或False,但你在那里對一堆美元值進行數學運算。
我認為你想在你的遞回案例中采用這樣的方法:
return (
possiblechange(total-penny, coins-1) or
possiblechange(total-nickel, coins-1) or
possiblechange(total-dime, coins-1) or
possiblechange(total-quarter, coins-1)
)
下一個問題是你沒有任何基礎案例來處理失敗。如果你找不到一個有效的變化集,你需要回傳False。我建議:
if total < 0 or coins == 0:
最后一個問題是一個微妙的問題。你正在用浮點數進行數學運算,這可能不準確。你可能應該用美分來計算,而不是用一美元的分數來計算,這樣每一種面額都可以被準確地表示出來。
uj5u.com熱心網友回復:
你必須從每個遞回呼叫中減去總數和硬幣。另外,用硬幣的價值乘以布爾結果的意義何在?例如,不要用quarter*possiblechange(total, coins)來代替 possiblechange(total - querter, coins - 1) .
uj5u.com熱心網友回復:
python的遞回限制被設定為1000。然而,如果你的電腦有足夠的資源,你可以通過在第一行加入這段代碼來增加這個限制:
import sys
sys.setrecursionlimit([NUMBER OF RECURSIONS])
將[NUMBER OF RECURSIONS]替換為你需要的遞回數量。
重要的是:你的函式確實回傳了布林值和數字。請注意,Python 在運算中把布林值當作數字。這可能是導致你的函式比需要的遞回多得多的問題。
請注意,Python 將布爾運算視為數字:真意味著 1,假意味著 0。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319336.html
標籤:
上一篇:向后遞回
