递归
举个栗子
- 在整个数组中找最大值
图解系统执行过程
/**
* @author wangxu
* 递归实现在整个数组中找最大值
*/
public class RecursionTest1 {
/**
* 使用递归实现的话,其实递归中是包含着分治思想的
* 我们将数组一分为二,找出左边的最大值和右边的最大值比较,谁大谁就是整个数组的最大值
* @param arr
* @return
*/
public static int getMax(int[] arr,int left,int right){
//终止条件
if (left == right){
return arr[left];
}
//int mid = (left+right)/2;如果数组开的长度比较大,left+right可能会溢出
//int mid = left+(right-left)/2;left,right,(right-left)不会溢出
int mid = left+(right-left)/2;
//分治思想去找各自最大值
int maxLeft = getMax(arr, left, mid);
int maxRight = getMax(arr, mid+1, right);
//然后去比较
return Math.max(maxLeft,maxRight);
}
public static void main(String[] args) {
int[] arr = {4,3,2,1};
int max = getMax(arr, 0, arr.length - 1);
System.out.println(max);
}
}
注 : 递归函数就是系统在帮你压栈
任何递归行为都可以改为非递归!