递归函数作用域内的列表未更新


def largest_to_last(arr, index):
if(len(arr) == 1):
return 
largest_to_last(arr[:-1], index-1)
if(arr[index-1] > arr[index]):
arr[index-1], arr[index] = arr[index], arr[index-1]
# print(arr)
return

arr = [1,4,2,8,5,6]
largest_to_last(arr, len(arr)-1)
print(arr)

我必须使用递归将最大的元素推到数组的末尾。我在这里找不到任何错误,有人能帮忙吗?

当您传递arr[:-1]时,将创建数组的副本,并且更改不会反映到原始列表中。这里有一个固定的、简单的实现:

def sort(arr, index):
if(len(arr) == 2):
if(arr[index-1] > arr[index]):
arr[index-1], arr[index] = arr[index], arr[index-1]
return arr
arr = sort(arr[:index], index-1)+[arr[index]]
if(arr[index-1] > arr[index]):
arr[index-1], arr[index] = arr[index], arr[index-1]
return arr

arr = [1,4,2,8,5,6]
arr = sort(arr, len(arr)-1)
print(arr)

最新更新