用递归法求数组的最大值.函数接口定义:int amax
时间: 2023-11-27 15:53:10 浏览: 45
(int *arr, int n),其中arr为整型数组,n为数组长度。下面是递归实现的代码:
```c++
int amax(int *arr, int n) {
if (n == 1) {
return arr[0];
}
int max = amax(arr, n - 1);
if (max > arr[n - 1]) {
return max;
} else {
return arr[n - 1];
}
}
```
首先,当数组长度为1时,直接返回数组中唯一的元素。
否则,先递归求出前n-1个元素的最大值,然后将这个最大值与第n个元素进行比较,返回更大的那个。
注意,这里用到了三目运算符,可以简化代码。
相关问题
用递归法求数组的最大值。 函数接口定义: int amax(int a[],int n); 其中 a 和 n 都是用户传入的参数。函数用递归法求数组 a 的最大值。 #include <stdio.h> int amax(int a[],int n) { } int main() { int a[10],i,max; for(i=0;i<10;i++) scanf("%d",&a[i]); max=amax(a,10); printf("max=%d\n",max); return 0; } 输入样例: 3 5 10 6 8 7 1 2 4 9 输出样例: max=10
可以使用递归的思想,将数组分为两部分,分别求左右两部分的最大值,然后比较两部分的最大值,返回较大的一个。
具体实现如下:
```c
int amax(int a[], int n) {
if (n == 1) { // 如果只有一个元素,直接返回该元素
return a[0];
} else {
int left_max = amax(a, n / 2); // 求左半部分的最大值
int right_max = amax(a + n / 2, n - n / 2); // 求右半部分的最大值
return left_max > right_max ? left_max : right_max; // 返回左右两部分的最大值中较大的一个
}
}
```
完整代码如下:
```c
#include <stdio.h>
int amax(int a[], int n) {
if (n == 1) { // 如果只有一个元素,直接返回该元素
return a[0];
} else {
int left_max = amax(a, n / 2); // 求左半部分的最大值
int right_max = amax(a + n / 2, n - n / 2); // 求右半部分的最大值
return left_max > right_max ? left_max : right_max; // 返回左右两部分的最大值中较大的一个
}
}
int main() {
int a[10], i, max;
for (i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
max = amax(a, 10);
printf("max=%d\n", max);
return 0;
}
```
6-3 用递归法求数组的最大值
可以使用递归法来求数组的最大值,具体步骤如下:
1. 定义一个函数 `find_max(arr, n)`,其中 `arr` 是待查找的数组,`n` 是数组长度。
2. 如果数组长度为 1,直接返回该元素值。
3. 否则,将该数组分为两个子数组,左子数组为 `arr[0:n//2]`,右子数组为 `arr[n//2:n]`。
4. 分别对左右子数组调用 `find_max()` 函数,返回左子数组的最大值和右子数组的最大值。
5. 比较两个子数组的最大值,返回较大值作为整个数组的最大值。
以下是示例 Python 代码实现:
```python
def find_max(arr, n):
if n == 1:
return arr[0]
else:
left_max = find_max(arr[0:n//2], n//2)
right_max = find_max(arr[n//2:n], n-n//2)
return max(left_max, right_max)
```
调用该函数:
```python
arr = [1, 2, 3, 4, 5, 6, 7]
n = len(arr)
print(find_max(arr, n)) # 输出 7
```