微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

逐步反转数组的递归方法

如何解决逐步反转数组的递归方法

有人可以向我解释这种逐步反转数组的递归方法吗?

# Recursive python program to reverse an array
# Function to reverse A[] from start to end
   def reverseList(A,start,end):

    if start >= end:

        return

    A[start],A[end] = A[end],A[start]

    reverseList(A,start+1,end-1)

 
# Driver function to test above function

A = [1,2,3,4,5,6]

print(A)

reverseList(A,5)

print("Reversed list is")

print(A)

输出

1 2 3 4 5 6

反向列表是:

6 5 4 3 2 1

解决方法

您正在做的是从函数的两端开始,交换开始和结束索引,然后将两个索引向中心移近一点,一旦索引相遇,函数就会返回。所以这是函数每次被调用时所做的事情:

1 2 3 4 5 6 -> 6 2 3 4 5 1 -> 6 5 3 4 2 1 -> 6 5 4 3 2 1

,

该方法获取数组的第一个元素(索引为 start)和最后一个元素(索引为 end),并交换它们。然后它获取第二个元素和倒数第二个元素并交换它们。它一直持续到您到达中间,其中 start 索引小于 end 索引。

,

这是通过创建两个指针来工作的,一个在列表的第一个,一个在列表的末尾 startend,让我们称这对为“切换”指针,它指示应该切换项目的位置,在我们切换这些元素后,我们向每个方向移动一步(开始 -> 结束)&(结束 -> 开始),我们一直这样做直到开始大于结束,这意味着我们完成了列表。

使用 for 循环的相同实现

for i in range(int(len(A)/2)):
    A[i],A[len(A) - 1 - i] = A[len(A) - 1 -i],A[i]
,

这是一种解释,粗体数字是变化。

开始 = 0,结束 = 5,A = 1 2 3 4 5 6(输入)

start = 0,end = 5,A = 6 2 3 4 5 1(从 A 交换第 0 个和第 5 个元素)

start = 1,end = 4,A = 6 2 3 4 5 1(输入第二次)

start = 1,end = 4,A = 6 5 3 4 2 1(交换 A 中的第 1 个和第 4 个元素)

start = 2,end = 3,A = 6 5 4 3 2 1 (第三次输入)

start = 2,end = 3,A = 6 5 4 3 2 1 (交换 A 中的第二个和第三个元素)

start = 3,end = 2,A = 6 5 4 3 2 1 (第四次输入)

原样返回,你得到最终的 A = 6 5 4 3 2 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。