私はCSの初心者であり、再帰を使用して変更を行う問題を解決しようとしました。これは、別の質問で言及されています。再帰的な変更を行うアルゴリズム
def change(total, coins):
def coin_change(remain, position, changes=None):
changes=[] if changes is None else changes
if remain == 0:
return len(changes), changes
elif remain < 0 or position == -1:
return float('inf'), changes
else:
strategy1 = coin_change(remain, position-1, changes)
strategy2 = coin_change(remain-coins[position], position,
changes+[coins[position]])
if strategy1[0] >= strategy2[0]:
return strategy2
else:
return strategy1
return coin_change(total, len(coins)-1, changes=None)
コードは、などの小さな入力が与えられた場合はうまく機能し(49, [1,5,12,24])
ますが、入力が大きくなると、コードは非常に遅くなり、可能性が高い場合は、次の(1000, [1,5,12,24])
ようにエラーがポップアップします。
File "********\coin_change.py", line 56, in testperformance
function1(1480, [1, 7, 24, 42])
私はいくつかの動的計画法を利用してこの問題を解決しましたが、最初のコードの何が問題になっているのか本当に興味があります。スタックオーバーフローの問題ですか?それはどのように起こりますか?いくつかの明確な説明または参考資料を期待してください。