怎么做这种练习?

时间:2016-05-03 03:18:39

标签: python sorting recursion mergesort

def combine (l1,l2):
    if l1 == []:
        return l2
    if l2 == []:
        return l1
    if l1[0] <= l2[0]:
        return [l1[0]] + combine(l1[1:], l2)
    return [l2[0]] + combine(l1, l2[1:])

我正在尝试定义一个名为“sort”的函数来递归地合并列表并返回一个包含的新列表(不会改变参数) 其参数列表中的每个值,但按排序/非降序排列。

def sort(l):
    if l == []:
        return []
    else:
        l1, l2 = l[0:int(len(l)/2)], l[int(len(l)/2):]
        s = combine(l1, l2)
        return sort(s)

然而,它总是给我一个错误:

RuntimeError: maximum recursion depth exceeded in comparison

1 个答案:

答案 0 :(得分:2)

如果backpressed()有任何项目,您的sort函数将一遍又一遍地使用相同大小的输入递归调用自身。这最终将导致l。如果您更改函数以将给定的RuntimeError拆分为两个,则对这两半进行排序并将结果组合起来,它会按预期工作:

list

由于上面的函数将给定的def merge_sort(l): if len(l) <= 1: return l return combine(merge_sort(l[0:len(l)/2]), merge_sort(l[len(l)/2:])) 拆分为两个,递归最终会在list时终止。