已知A[n]为整数数组,试写出实现下列运算的递归算法: (1)求数组A中的最大整数。 (2)求n个整数的和。 (3)求n和整数的平均值。
时间: 2024-09-26 20:10:55 浏览: 43
(1) 求数组A中的最大整数的递归算法:
```cpp
int findMax(int A[], int n, int currentMax = INT_MIN) {
// 基本情况:当数组只剩下一个元素时,它是最大值
if (n == 1) {
return A[0];
}
// 如果当前元素大于currentMax,则更新currentMax
if (A[n - 1] > currentMax) {
currentMax = A[n - 1];
}
// 递归调用,处理剩余元素
return findMax(A, n - 1, currentMax);
}
// 使用示例:
int arr[] = {5, 3, 9, 1, 7};
int size = sizeof(arr) / sizeof(arr[0]);
int maxNum = findMax(arr, size);
```
(2) 求n个整数的和的递归算法:
```cpp
int sum(int A[], int n, int totalSum = 0) {
// 基本情况:当数组为空或只有一个元素时,返回该元素
if (n == 0) {
return totalSum;
} else {
// 递归调用,累加当前元素到总和
return sum(A, n - 1, totalSum + A[n - 1]);
}
}
// 使用示例:
int arr[] = {5, 3, 9, 1, 7};
int sumOfArray = sum(arr, sizeof(arr) / sizeof(arr[0]));
```
(3) 求n个整数的平均值(也称为算术平均数)的递归算法:
由于直接求平均数不是递归操作,因为我们需要知道所有元素的总和,但在递归里我们无法得到这个信息。但你可以先计算总和然后除以元素数量,非递归实现如下:
```cpp
double average(int A[], int n) {
int sum = sum(A, n);
return static_cast<double>(sum) / n; // 防止整数除法
}
// 使用示例:
int arr[] = {5, 3, 9, 1, 7};
int size = sizeof(arr) / sizeof(arr[0]);
double avgNum = average(arr, size);
```
阅读全文