python有一个默认的最大递归深度,我可以增加:
导入系统
sys.setrecursionlimit(100000)我正在使用合并排序,当我在80000个元素列表上尝试它时,python“退出…
问题来自你的 merge(left, right) 在O(n)中递归的实现。您可以在每个递归步骤中将两个排序列表合并一个元素。合并递归的想法可能适用于优化尾递归的语言, 但在python中并非如此 。
merge(left, right)
通常,合并是迭代的,因为其复杂性将始终至少是要合并的元素的数量。
def merge(left, right): merged = [] i = 0 j = 0 while i < len(left) and j < len(right) : if left[i] < right[j]: merged.append(left[i]) i+=1 else: merged.append(right[j]) j+=1 merged += left[i:] merged += right[j:] return merged