递归超过了限制,而我正试图将我的列表拆分为一个长度



iam试图编写合并排序,但不起作用为什么在这里,当我运行这个代码时,它并没有分割所有的列表,它只是重复这个表单

ID_list=[5,8,9]
def merge_sort(Id_list):
#define middle
middle_index=len(ID_list)//2
#split array into two parts (copies: left and right)
left=ID_list[:middle_index]
right=ID_list[middle_index:]
#call merge sort for left
print(left)
print(right)
merge_sort(left)
#call merge sort for right
merge_sort(right)
merge_sort(ID_list)
the output is below:
[5]
[8, 9]
[5]
[8, 9]
[5]
[8, 9]
[5]
[8, 9]
Recursion Error: maximum recursion depth exceeded while calling a Python object
what i need to have 
[5]
[8]
[9]
ID_list=[5,8,9]

所以你想把它分成1值的lists?

result = [[element] for element in ID_list]

没有什么困难。

您混淆了变量标识符。您有一个名为ID_list的全局列表和参数函数Id_list的参数。问题是,您永远不会调用函数的参数!为了明确起见,我将函数的参数重命名为lst。此外,还缺少退出递归的条件。

这里如何修复递归错误:

def merge_sort(lst):
#define middle
middle_index=len(lst)//2
if middle_index == 0: # breaking condition
return
#split array into two parts (copies: left and right)
left=lst[:middle_index]
right=lst[middle_index:]
#call merge sort for left
print(left)
print(right)
merge_sort(left)
#call merge sort for right
merge_sort(right)
ID_list=[5,8,9]
merge_sort(ID_list)
#[5]
#[8, 9]
#[8]
#[9]

您在函数中错误地输入了返回语句或break条件。您需要在函数的开头添加以下行:

def merge_sort(ID_list):
if len(ID_list) == 1:
return

最新更新