对于含n个整数的数组a[0..n-1],可以这样求最大元素值: ① 若n=1,则返回a[0]。 ② 否则,取中间位置mid,求出前半部分中的最大元素值max1,求出后半部分中的最大元素值max2,返回max(max1,max2)。 给出实现上述过程的递归算法。
时间: 2024-10-24 09:17:33 浏览: 27
这段描述实际上是在讲解分治法(Divide and Conquer)在查找有序数组的最大元素时的应用。这里的关键思想是将问题分解成两个规模较小的子问题,然后合并结果。以下是使用递归实现这个算法的C++代码:
```cpp
int findMax(int arr[], int low, int high) {
// 基线条件:如果数组只有一个元素,直接返回该元素
if (low == high) {
return arr[low];
}
// 计算数组的中间位置
int mid = (low + high) / 2;
// 递归地找出左半部分和右半部分的最大值
int max1 = findMax(arr, low, mid);
int max2 = findMax(arr, mid + 1, high);
// 返回两个部分中的较大者
return std::max(max1, max2);
}
```
你可以通过调用`findMax(arr, 0, n - 1)`来获取整个数组`arr`中的最大值,其中`arr`是输入数组,`n`是数组的长度。
阅读全文