达到最大递归深度

2024-10-01 09:30:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试实现合并排序,但一直遇到“最大递归深度”错误。我目前的理论是“if listlen<;=1:”没有抓住它,但我不知道为什么

def mergesort(listin):
    listlen = len(listin)

    if listlen <= 1:
        return listin

    left = []
    right = []
    i = 0
    while i < listlen:
        if i <= listlen / 2:
            left.append(listin[i])
        else:
            right.append(listin[i])
        i += 1

    left = mergesort(left)
    right = mergesort(right)


    return merge(left, right)

def merge(listlef, listrig):
    result = []

    while len(listlef) != 0 and len(listrig) != 0:
        if listlef[0] <= listrig[0]:
            result.append(listlef[0])
            listlef = listlef[1:]
        else:
            result.append(listrig[0])
            listrig = listrig[1:]

    while len(listlef) != 0:
        result.append(listlef[0])
        listlef = listlef[1:]
    while len(listrig) != 0:
        result.append(listrig[0])
        listrig = listrig[1:]

    return result

Tags: rightlenreturnifdefresultleftelse
1条回答
网友
1楼 · 发布于 2024-10-01 09:30:23

对于大小为2的列表,请注意i将仅为0和1,这两个值都小于或等于2/1==1。你知道吗

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

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

相关问题 更多 >