为了账号安全,请及时绑定邮箱和手机立即绑定

合并排序“比较中超过最大递归深度”

合并排序“比较中超过最大递归深度”

凤凰求蛊 2021-05-14 14:14:06
我想在Python 3中进行代码合并排序。这是我的代码:import mathdef Merge(array,start,mid,end):    n1 = mid - start +1    n2 = end - mid    i = 0    j = 0    left = [None] * n1    right = [None] * n2    inv = 0    for i in range(0,n1):        left[i] = array[start + i - 1]    for j in range(0,n2):        right[j] = array[mid + j]    left.append(math.inf)    right.append(math.inf)    new_list = []    for k in range(0,end):        if left[i] <= right[j]:            array[k] = left[i]            i+=1        elif left[i] > right[j]:            array[k] = right[j]            j+=1def MergeSort(array,start,end):    if len(array) <= 1:        return array    mid = math.ceil((start + end)/2)    MergeSort(array,start,mid)    MergeSort(array,mid+start,end)    Merge(array,start,mid,end)stuff = [1, -5, 17, 32, 6] MergeSort(stuff, 0, len(stuff))print(stuff)我测试了第一个功能(合并),它可以正常工作。但是我对递归有问题。我不知道问题出在哪里。错误是“比较中超出了最大递归深度”。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

您没有从退出的功能MergeSort。当您在每次通话中传递整个列表时,列表的长度永远不会改变。如果您从列表中的5个元素开始,则len(array)始终为5。因此,您将转到左侧基本项目(一个元素),并永远永远锤击该元素。

尝试检查范围,例如

if end - start <= 1:

这至少将使您了解下一个执行问题。


请参阅这个可爱的调试博客以获取帮助。如果没有其他问题,请学习放入有用的print语句以跟踪数据和控制流程。


查看完整回答
反对 回复 2021-05-25
  • 1 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信