【问题标题】:Recursive method of reversing an array step by step逐步反转数组的递归方法
【发布时间】:2021-09-23 10:35:45
【问题描述】:

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

# 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, 0, 5)

print("Reversed list is")

print(A)

输出:

1 2 3 4 5 6

反向列表是:

6 5 4 3 2 1

【问题讨论】:

  • 您是否尝试过拿一张纸并自己“执行”代码?您是否有一个特定的部分难以理解?
  • 真的很简单。交换两端,然后颠倒两端之间的内容。
  • 否则只需要在函数开头加上 print(A, start,end) 看看trace ...这会帮助你理解
  • def下添加print(A),你就会明白更多。
  • 你对它有什么了解

标签: python arrays recursion reverse


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这是通过创建两个指针来实现的这些元素我们在每个方向上移动一步(开始 -> 结束)和(结束 -> 开始),我们一直这样做,直到开始大于结束,这意味着我们完成了列表。

      使用 for 循环的相同实现

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

      【讨论】:

        【解决方案4】:

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

        开始 = 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交换第一个和第四个元素)

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-14
          • 1970-01-01
          • 2012-10-20
          • 1970-01-01
          • 1970-01-01
          • 2019-07-25
          • 1970-01-01
          相关资源
          最近更新 更多