Python 达到最大递归深度合并排序

Python 达到最大递归深度合并排序,python,recursion,mergesort,Python,Recursion,Mergesort,我一直在尝试实现合并排序,但一直遇到“最大递归深度”错误。我目前的理论是,“如果列表长度对于大小为2的列表,请注意i将仅为0和1,两者都小于或等于2/1==1 不过,与其摆弄索引,不如选择附加到哪个列表: left = [] right = [] for item in listin: left.append(item) left, right = right, left 可能不相关,但如果您使用的是python 3,listlen/2返回一个浮点值。您必须执行/(适用于所有p

我一直在尝试实现合并排序,但一直遇到“最大递归深度”错误。我目前的理论是,“如果列表长度对于大小为2的列表,请注意
i
将仅为0和1,两者都小于或等于2/1==1

不过,与其摆弄索引,不如选择附加到哪个列表:

left = []
right = []
for item in listin:
    left.append(item)
    left, right = right, left

可能不相关,但如果您使用的是python 3,
listlen/2
返回一个浮点值。您必须执行
/
(适用于所有python版本)如果您有足够长的输入,最大递归错误是不可避免的。忘了添加一个只有2个数字的情况。要拆分
listin
,只需将其切片两次。
k=listlen//2;left=listin[:k];right=listin[k:]
。这样,就不会有递归问题。这不是您的直接问题,但在
合并
中,输入的重复切片会使其速度比应该的慢得多。要更好地查看现有代码的运行情况,请添加
打印(左、右)
在递归
mergesort
调用之前和之后。我会假装我想指出这种技术,而不是忽略注释中提到的显而易见的解决方案。
left = []
right = []
for item in listin:
    left.append(item)
    left, right = right, left