重温简单递归
C++ 版本
#include <iostream>
#include <vector>
using namespace std;
// arr[l...r] 范围上的最大值
int f(const vector<int>& arr, int l, int r) {
if (l == r) {
return arr[l];
}
int m = (l + r) / 2;
int lmax = f(arr, l, m);
int rmax = f(arr, m + 1, r);
return max(lmax, rmax);
}
int maxValue(const vector<int>& arr) {
return f(arr, 0, arr.size() - 1);
}
int main() {
vector<int> arr = {3, 8, 7, 6, 4, 5, 1, 2};
cout << "数组最大值 : " << maxValue(arr) << endl;
return 0;
}
C 版本
#include <stdio.h>
// 获取数组中 l 到 r 范围内的最大值
int f(int arr[], int l, int r) {
if (l == r) {
return arr[l];
}
int m = (l + r) / 2;
int lmax = f(arr, l, m);
int rmax = f(arr, m + 1, r);
return (lmax > rmax)? lmax : rmax;
}
int maxValue(int arr[], int n) {
return f(arr, 0, n - 1);
}
int main() {
int arr[] = {3, 8, 7, 6, 4, 5, 1, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printf("数组最大值 : %d\n", maxValue(arr, n));
return 0;
}
• C++ 版本:
◦ 使用 vector 来存储数组,这是 C++ 中常用的动态数组容器。
◦ f 函数递归地查找数组指定范围内的最大值,先判断范围只有一个元素时直接返回该元素,否则将范围分成两部分,分别递归查找左右子范围的最大值,最后返回两者中的较大值。
◦ maxValue 函数作为入口,调用 f 函数从整个数组范围开始查找最大值。
◦ 在 main 函数中创建 vector 并初始化,调用 maxValue 函数获取最大值并输出。
• C 版本:
◦ 直接使用普通数组,通过数组名和元素个数来操作。
◦ f 函数功能与 C++ 版本类似,通过递归查找指定范围最大值。
◦ maxValue 函数作为入口调用 f 函数查找整个数组最大值。
◦ 在 main 函数中定义数组,计算数组元素个数,调用 maxValue 函数获取最大值并通过 printf 输出。