C ++:递归Max of Array函数

时间:2015-11-22 06:45:27

标签: c++ arrays recursion

static int max(int arr[ ], int size) {
if (size == 1)
   return arr[0];
int maxOfRest = max(arr + 1, size - 1);
if (arr[0] > maxOfRest)
    return arr[0];
else
    return maxOfRest;
}

我不明白这个功能是如何工作的。像这样的递归函数对我来说并不合理。

3 个答案:

答案 0 :(得分:1)

当试图理解递归时,有助于在适当的点上打印关键信息的代码行。对于你的功能,我建议:

static int max(int arr[ ], int size) {

if (size == 1)
   return arr[0];

int maxOfRest = max(arr + 1, size - 1);

std::cout << "maxOfRest: " << maxOfRest << ", arr[0]: " << arr[0] << std::endl;

if (arr[0] > maxOfRest)
    return arr[0];
else
    return maxOfRest;
}

我有一种感觉,可以帮助您了解这个特定功能的工作原理。

答案 1 :(得分:0)

您可能已经弄明白代码的作用,但不喜欢它的完成方式。

当您打算在数组中找到最大元素时:

  1. 检查数组的大小是否为1。如果为true,则返回数组arr[0]中的第一个元素。

  2. 否则,您可以将数组arr[0]的第一个元素与数组maxOfRest的其余部分中的最大元素进行比较,并返回更大的数字arr[0]和{{1 }}

  3. 递归用于从数组的其余部分中查找最大值。

答案 2 :(得分:0)

看起来你用数组的长度大小调用它,因此该方法比较其他的每个值:

  

A:5,4,3,9,2

所以你打电话给max (A, 5);

  

max({5,4,3,9,2},5)

     

尺寸!= 1 - &gt; maxOfRest = max({4,3,9,2},4)

     

尺寸!= 1 - &gt; maxOfRest = max({3,9,2},3)

     

尺寸!= 1 - &gt; maxOfRest = max({9,2},2)

     

尺寸!= 1 - &gt; maxOfRest = max({2},1)

现在,它返回2并且我们处于if状态并且任何时候检查A [0](下一个值)是否大于maxOrRest:

  

(9> 2?

     

9&gt; 3?

     

9&gt; 4?

     

返回9。)