0

私は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])

私はいくつかの動的計画法を利用してこの問題を解決しましたが、最初のコードの何が問題になっているのか本当に興味があります。スタックオーバーフローの問題ですか?それはどのように起こりますか?いくつかの明確な説明または参考資料を期待してください。

4

0 に答える 0