从未与递归有过良好的关系。所以我需要了解这些脚本中发生了什么。首先,我们有一个“合并脚本”:
def merge(list_1, list_2):
result = list()
while len(list_1) > 0 and len(list_2) > 0:
list_1_item = list_1[0]
list_2_item = list_2[0]
if list_1_item <= list_2_item:
result.append(list_1_item)
list_1.remove(list_1_item)
else:
result.append(list_2_item)
list_2.remove(list_2_item)
result.extend(list_1)
result.extend(list_2)
return result
该脚本只是按顺序合并两个列表,然后我们有mergesort算法:
def mergesort(input_list):
if len(input_list) <= 1:
return input_list
else:
input_list_len = len(input_list)
mid = input_list_len // 2
left = mergesort(input_list[0:mid])
#print(left)
right = mergesort(input_list[mid:input_list_len])
#print(right)
return merge(left, right)
现在我有点迷茫,我试图找出一张纸上发生的事情:
在mergesort函数中,最终语句(return merge(left,right))
执行了多少次?
如果我打印左右值,我将其作为输出:
[1]
[23]
[1, 23]
[3]
[56]
[8]
[8, 56]
[3, 8, 56]
现在这告诉我:对于我们的第一次执行(给mergesort([1,23,3,56,8])
)
left = mergesort([1,23])
right = mergesort([3,56,8])
现在我们专注于左侧,mergesort函数运行,我们有:
left = mergesort([1])
right = mergesort([23])
同时我们有:
left = mergesort([3])
right = mergesort([56,8])
现在该功能应该集中在列表[56,8]并给我们:
left = mergesort([56])
right = mergesort([8])
是对的吗?我的问题是:如果函数拆分输入列表,直到我们有一个单项的列表,不应该返回该列表,如if块状态?当最终合并功能开始工作时,他的第一个输入是什么? 我知道我有点困惑.. 非常感谢