python找钱_python 递归 找零钱
首先回答你的問題
count = 1 + coins_changeREC(coin_values, change-value)#1.when reached here, one recursion link ends
if count < min_count:
min_count = count #2. update the minimum count of coins
每次走到注釋1的地方的時候,對于一個coin_value開始的遞歸鏈已經結束并得到了總數。
這段代碼意思是在對于每個面額硬幣開始的遞歸過程中,不斷維護min_count這個變量,使其為所有可能性組合中最小的硬幣數目。但是如果一開始不給min_count賦值,那就需要在第一次有得到count值的時候,額外增加判斷min_count是否有值的邏輯,如果有,和min_count比較,兩者中較小值,如果無值,將count賦給min_count。而總額的數目比如20,比如50,肯定大于等于需要的硬幣數,所以min_count值是個很好的初始值,只要無腦把count和min_count中較小值賦值給min_count就好了。
如果不給min_count初始值,則代碼大致為:
def coins_changeREC(coin_values, change):
min_count = None
if change in coin_values:
return 1
for value in [i for i in coin_values if i <= change]:
count = 1 + coins_changeREC(coin_values, change-value)
if min_count is None:
min_count = count
else:
min_count = min(min_count,count)
return min_count
一點ps:
遞歸代碼的思路比較反人類,想不清楚的時候可以畫出遞歸的路徑,也能幫你看出重復的遞歸路徑,為日后進階到動態規劃打好基礎。
這個代碼在暴力遞歸解法中也是效率較低的,每次都要生產新的list,可以遍歷原有的list,通過if篩選比change總數小的值的硬幣就可以了。
總結
以上是生活随笔為你收集整理的python找钱_python 递归 找零钱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web api、获取DOM元素的方式、事
- 下一篇: 湖北汽车工业学院c语言程序设计 汽车零部