通过递归在数组中查找最大值

Jus*_*ins 10 arrays algorithm search pseudocode

// Find a maximum element in the array.
findMax(A)
   findMaxHelper(A, 0, A.length)

findMaxHelper(A, left, right)
   if (left == right - 1) 
      return A[left]
   else
      max1 = findMaxHelper(A, left, (right + left) / 2)
      max2 = findMaxHelper(A, (right + left) / 2, right)

      if (max1 > max2) 
         return max1 
      else 
         return max2
Run Code Online (Sandbox Code Playgroud)

我很难理解这个伪代码中发生了什么.

有人可以帮助解释每一行发生的事情.在我回答问题之前,我需要先理解这段代码.

我知道函数findMax调用辅助函数findMaxHelper,然后findMaxHelper使用递归.除此之外,我真的不明白.

Jai*_*dra 30

您正在使用Divide and Conquer算法来查找数组中的最大元素.首先,您将数组划分为单个元素(除法),然后比较元素(征服).您正在使用findMaxHelper递归调用来划分数组.

分而治之的总体思路如下图所示:

在此输入图像描述

例:

在此输入图像描述max与你的findMaxHelper函数有两个参数,即leftright.

查看示例以更深入地了解该概念.

  • 给任何难以理解递归代码的人的一般建议:不要试图深入研究并遵循。最好做一个“缩小”并尝试了解更大的图景。递归函数通常接受输入,执行基本操作并**对较小的问题重复相同的操作**,就像在此代码片段中一样。您应该尝试找出较小的问题,这是理解此类代码的核心。 (2认同)