递归调用最重要的三点:
1.递归调用总有一个最简单的情况——方法的第一条语句 总是一个包含return 的条件语句
2.递归调用总是去尝试解决一个规模更小的子问题;这样地柜调用才能收敛到最简单的情况
3.递归调用的父问题和尝试解决的子问题之间不应该有交集。
package ch1.ch1_1;
public class Rank {//p15二分查找
public static int rank(int key,int[]a){
return rank(key,a,0,a.length-1);
}
public static int rank(int key, int[] a, int lo, int hi) {
//若果key存在于a[]中,他的索引不会小于lo不会大于hi
if (lo>hi) {return -1;}
int mid = lo+(hi-lo)/2;
if (key>a[mid]) {
return rank(key, a, lo, mid+1);
}
else if (key<mid) {
return rank(key, a, lo, mid-1);
}
return mid;
}
}