请用递归实现找到数组中的最大(最小)值: 2)使用数组的左半边和右半边比较。
时间: 2024-10-23 10:14:34 浏览: 15
《算法图解》笔记1
要使用递归来找到数组中的最大值或最小值,我们可以定义一个递归函数,该函数会比较当前元素与已知的最大值或最小值。这里我们先分别介绍如何找到最大值和最小值:
1. **寻找最大值** (递归找最大)
```java
public int findMax(int[] arr, int start, int end) {
// 基线条件: 如果只有一个元素或开始位置等于结束位置,返回该元素
if (start == end) {
return arr[start];
}
// 递归条件: 否则,比较中间元素与左右子数组的最大值
int mid = (start + end) / 2;
int leftMax = findMax(arr, start, mid); // 左半边的最大值
int rightMax = findMax(arr, mid + 1, end); // 右半边的最大值
// 返回较大的那个
return Math.max(leftMax, rightMax);
}
// 使用方法:
int[] arr = {1, 5, 3, 9, 2};
int max = findMax(arr, 0, arr.length - 1);
System.out.println("最大值: " + max);
```
2. **寻找最小值**
同样的思路,只需要更改比较的部分为`Math.min()`:
```java
public int findMin(int[] arr, int start, int end) {
// ... (保持相同的基础和递归条件)
int leftMin = findMin(arr, start, mid); // 左半边的最小值
int rightMin = findMin(arr, mid + 1, end); // 右半边的最小值
// 返回较小的那个
return Math.min(leftMin, rightMin);
}
// 使用方法:
int[] arr = {1, 5, 3, 9, 2};
int min = findMin(arr, 0, arr.length - 1);
System.out.println("最小值: " + min);
```
阅读全文