它是递归中的堆栈溢出错误吗?

时间:2012-09-22 15:22:18

标签: python recursion overflow

我是CS的新手,我只是尝试使用递归来解决变更问题,这在另一个问题中提到Recursive change-making algorithm

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

虽然我已经通过使用一些动态编程技术解决了这个问题,但我真的很好奇我的初始代码有什么问题。这是堆栈溢出问题吗?怎么会发生?希望有一些明确的解释或参考资料。

0 个答案:

没有答案