使用递归查找最大值,不断的找中间值,这里需要注意一下,中间值mid尽量不要用(left+right)/2,因为如果数组长度比较大时,进行left+right的时候可能存在溢出,若出现溢出则此时方法就失效了
package problem;
public class GetMax {
public static int getMax(int[] arr,int left,int right)
{
if(left==right)
{
return arr[left];
}
int mid=left+((right-left)>>1);
int leftMax=getMax(arr,left,mid);
int rightMax=getMax(arr,mid+1,right);
return leftMax>rightMax?leftMax:rightMax;
}
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9,0,10};
int max=getMax(arr,0,arr.length-1);
System.out.println(max);
}
}
执行结果为:
10
- 递归时间复杂度的分析