我不明白为什么我在这里得到最大的递归深度

时间:2014-12-16 22:45:44

标签: python sorting recursion

我有这样的功能:

def sort(lst, beg, end):
    mid = (beg + end)/2
    sort(lst, beg, mid)
    sort(lst, mid, end)
    i = 0
    j = 0
    for l in range(beg, end):
        if j > end - mid or (i <= mid - beg and lst[beg + i] < lst[mid + j]):
            lst[l] = lst[beg + i]
            i = i + 1
        else:
            lst[l] = lst[mid + j]
            j = j + 1

输入为:sort([1,5,6,6,3,1,5,4,3,3,4,5,6,7,8,5,3,2,4,5], 1,10)

作为输出:

RuntimeError: maximum recursion depth exceeded

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

您错过了一个阻止您递归的条件。在当前的实现中,您将无限期地继续。

e.g:

def sort(lst, beg, end):
    if end - beg <= 1:
        return

    mid = (beg + end)/2
    sort(lst, beg, mid)
    sort(lst, mid, end)
    # rest of code

答案 1 :(得分:3)

没有什么能阻止递归。每次调用sort时,它都会调用自己2次。应该有条件陈述。