编写一个函数,使之能完成以下功能: 利用递归方法找出一个数组中的最大值和最小值,要求递归调用函数的格式如下: MinMaxValue(arr,n,&max,&min),其中 arr 是给定的数组,n 是数组元素的个数,max、min 分别是最大值和最小值,并输出最大值,最小值
时间: 2024-10-07 17:08:00 浏览: 46
在编写这样的函数时,我们可以定义两个辅助函数,分别用于递归查找当前数组元素中的最小值和最大值。下面是一个简单的 C++ 示例:
```cpp
#include <iostream>
// 辅助函数,寻找数组中剩余部分的最大值
int findMax(int arr[], int start, int end, int& max) {
if (start == end) { // 如果只剩一个元素,返回该元素即为最大值
return arr[start];
}
// 递归找到剩余部分的最大值
int maxInRemain = findMax(arr, start + 1, end, max);
// 更新最大值,如果当前元素比最大值大,则更新
if (arr[start] > maxInRemain) {
max = arr[start];
}
return maxInRemain;
}
// 辅助函数,寻找数组中剩余部分的最小值
int findMin(int arr[], int start, int end, int& min) {
if (start == end) { // 如果只剩一个元素,返回该元素即为最小值
return arr[start];
}
int minInRemain = findMin(arr, start + 1, end, min);
// 更新最小值,如果当前元素比最小值小,则更新
if (arr[start] < minInRemain) {
min = arr[start];
}
return minInRemain;
}
// 主函数,调用辅助函数并输出结果
void MinMaxValue(int arr[], int n, int& max, int& min) {
max = arr[0]; // 初始化最大值为数组的第一个元素
min = arr[0]; // 初始化最小值同样为第一个元素
if (n > 1) { // 如果有多个元素
min = findMin(arr + 1, 1, n - 1, min); // 从第二个元素开始找最小值
max = findMax(arr + 1, 1, n - 1, max); // 同理,找最大值
}
std::cout << "最大值: " << max << std::endl;
std::cout << "最小值: " << min << std::endl;
}
int main() {
int arr[] = {5, 8, 1, 9, 3};
int n = sizeof(arr) / sizeof(arr[0]);
int max, min;
MinMaxValue(arr, n, max, min);
return 0;
}
```
这个程序会递归地搜索数组,并在每次递归中更新最大值和最小值。当遍历完整个数组后,主函数将输出最大值和最小值。
阅读全文