思路:
- 定义一个递归函数
findMax
,它接受三个参数:数组arr
、起始位置start
和结束位置end
。 - 如果
start
等于end
,说明数组中只有一个元素,直接返回该元素的值作为最大值。 - 否则,计算数组的中间位置
mid
,可以使用(start + end) / 2
的方式。 - 递归调用
findMax
函数来分别处理左半部分和右半部分:- 对左半部分,调用
findMax(arr, start, mid)
,返回左半部分的最大值,将结果存储在变量leftMax
中。 - 对右半部分,调用
findMax(arr, mid + 1, end)
,返回右半部分的最大值,将结果存储在变量rightMax
中。
- 对左半部分,调用
- 返回
max(leftMax, rightMax)
,即左右两部分的最大值作为整个数组的最大值。
代码:
#include<iostream>
using namespace std;// 递归函数,用于在数组arr的[start, end]范围内查找最大值
int Findmax(int arr[], int start, int end) {// 当开始索引等于结束索引时,即只有一个元素时,返回该元素作为最大值if (start == end) {return arr[start];}// 计算中间索引int mid = (start + end) / 2;// 递归调用Findmax函数处理左半部分和右半部分int Leftmax = Findmax(arr, start, mid); // 左半部分的最大值int Rightmax = Findmax(arr, mid + 1, end); // 右半部分的最大值// 返回左右两部分的最大值作为整个数组的最大值return max(Leftmax, Rightmax);
}int main() {int arr[] = { 3,1,2,88,7,4,5 };int n = sizeof(arr) / sizeof(arr[0]);int max = Findmax(arr, 0, n - 1); // 调用Findmax函数查找最大值cout << max; // 输出最大值return 0;
}