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
答案 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
时终止。