递归
方法可以调用自己。
编写递归代码最重要的三点:
1、递归总有一个最简单的情况——方法的第一条语句总是一个包含return的条件语句。
2、递归调用总是去尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况。在下面的代码中,第四个参数和第三个参数的差值一直在缩小。
3、递归调用的父问题和尝试解决的子问题之间不应该有交集。
二分查找的递归实现:
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 ) {
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 > a[mid] )
return rank ( key, a, hi, mid + 1 );
else
return mid;
}