C++:数组函数的递归最大值

C++: Recursive Max of Array Function

本文关键字:递归 最大值 函数 数组 C++      更新时间:2023-10-16
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;
}

我不明白这个函数是如何工作的。像这样的递归函数对我来说不太有意义。

在尝试理解递归时,在适当的点打印关键信息的代码行会有所帮助。对于您的函数,我建议:

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. 检查数组的大小是否为 1。如果为 true,则将返回数组中的第一个元素 arr[0]

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

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

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

答: 5, 4, 3, 9, 2

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

最大值 ({5, 4, 3, 9, 2}, 5(

size !=1 -> maxOfRest = max({4, 3, 9, 2}, 4(

size !=1 -> maxOfRest = max({3, 9, 2}, 3(

size !=1 -> maxOfRest = max({9, 2}, 2(

size !=1 -> maxOfRest = max({2}, 1(

现在,它返回 2,我们处于if条件,并且随时检查 A[0](下一个值(是否大于 maxOrRest:

(9> 2 ?

9> 3 ?

9> 4 ?

返回 9.(