Я пытаюсь реализовать сортировку слияния, но я продолжаю работать с ошибкой «Максимальная погрешность рекурсии». Моя текущая теория гласит, что «если 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
возможно не имеет значения, но если вы используя python 3, 'listlen/2' возвращает float. Вы должны делать '//' (работает для всех версий python) –
Если у вас достаточно длинный ввод, ошибка максимальной рекурсии неизбежна. – chepner
Забыл добавить, что это происходит с двух чисел – user3800750