C++:数组函数的递归最大值
C++: Recursive Max of Array Function
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。如果为 true,则将返回数组中的第一个元素
arr[0]
。 -
否则,您将数组
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.(
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 使用指针从C++中的数组中获取最大值
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 在二维数组中查找最小值和最大值?
- 整数溢出,最大值为 pow(10,19)
- 以C++递归方式查找向量中的最大值
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- C++ 函数,用于查找传入的 N 个数字的平均值、总和、最小值和最大值
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如何使用可变参数模板类使用模板元编程获得最大值
- C++不同的最小最大值实现
- 递归函数,用于查找 2 个整数之间的最大值
- 为什么我的递归最长递增子序列函数不适用于大输入?
- 数组的C++最大值使用递归问题
- 最小最大值实现不适用于递归和C++
- C++:数组函数的递归最大值
- 递归最大整数
- 递归地查找数组中的最小值和最大值