递归求解数组中的最大值
题目描述
如题,给出一个数组【1、5、3、2】,用递归的方法求出数组中的最大元素。
思路:
将数组分为两部分:第一个数和余下的数,然后计算这两部分的最大值:
- 将【1、5、3、2】分为1和【5、3、2】,然后递归计算【5,3,2】的最大值;
- 将【5、3、2】分为5和【3,2】,递归计算【3,2】的最大值;
- 将【3、2】分为3和【2】,将3和2的最大值3返回到上一层;
- 计算5和3的最大值,很明显是5,将5返回到上一层;
- 计算1和5的最大值,返回5,递归结束。
java代码如下,Test.java:
/**
* 递归求数组中的最大元素
* @author lijialin
*
*/
public class Test {
public static int max(int[] arr, int i) {
if(i == arr.length - 1) {
return arr[i];
}
return Math.max(arr[i], max(arr, i+1));
}
public static void main(String[] args) {
// TODO Auto-generated method stub
// Test case
int[] arr1 = {1,5,3,2};
int[] arr2 = {1,0};
int[] arr3 = {6,-3,2};
int[] arr4 = {1};
System.out.println(max(arr1, 0)); // 5
System.out.println(max(arr2, 0)); // 1
System.out.println(max(arr3, 0)); // 6
System.out.println(max(arr4, 0)); // 1
}
}
运行结果如下: