java二分查詢的遞迴實現
阿新 • • 發佈:2018-12-30
遞迴:方法可以呼叫自己
編寫遞迴程式碼時有一下三點:
- 遞迴總有一個最簡單的情況——方法的第一條語句總是一個包含return的條件語句。
- 遞迴呼叫總是去嘗試解決一個規模更小的子問題,這樣遞迴才能收斂到最簡單的情況。在下面的程式碼中,第四個引數和第三個引數的差值一直在縮小。
- 遞迴呼叫的父問題和嘗試解決的子問題之間不應該有交集。在下面的程式碼中,兩個子問題各自操作的陣列部分是不同的。
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 > a[mid]) return rank(key, a, mid+1, hi); else return mid; }