// 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

我很难理解此伪代码中发生了什么。

有人可以帮忙解释每一行发生了什么。在回答问题之前,我需要了解此代码。

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

最佳答案

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

图中显示了“分而治之”的总体思路:

示例:

此处max与您的findMaxHelper函数相同,带有两个参数,即leftright

查看this示例,以更深入地了解该概念。

关于arrays - 通过递归查找数组中的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13117159/

10-12 16:30