我在寫一個遞歸方法,它不是執行二分搜索算法,而是將數組拆分爲三個並使用三元搜索算法。我相當肯定我遞歸的情況是正確的,但是我的基本情況似乎有問題。如果數組包含兩個或更少的值,則基本情況應該是非遞歸檢查,如果該值在數組中並返回索引。如果未找到該值,則返回-1。使用遞歸方法進行三元搜索
由於我無法弄清楚的原因,無論如何這個方法返回-1。無論數組的大小,還是數組是否包含該值。這是方法。
public static int trinarySearch(int[] array, int x, int low, int high) {
if (high - low < 3) { //BASE CASE.
for (int i = low; i < high; i++) {
if (array[i] == x) {
return i;
}
}
return -1;
} else { //RECURSIVE CASE.
int firstThird = low + (high - low)/3;
int secondThird = low + 2 * (high - low)/3;
if (x <= array[firstThird]) {
return trinarySearch(array, x, low, firstThird - 1);
} else if (x <= array[secondThird]) {
return trinarySearch(array, x, firstThird + 1, secondThird - 1);
} else { // must be (x > array[secondThird])
return trinarySearch(array, x, secondThird + 1, high);
}
}
}
在我的測試代碼,我只是建立一個數組作爲INT []數組= {1,2,...}
比方說,我搜索INT 2,它在數組中。我在測試代碼中設置了一個數組,並將該方法調用爲trinarySearch(array,2,0,array.length-1)。它每次打印-1。該方法有什麼問題,或者我只是簡單地設置了我的測試代碼?
的X <=陣列測試看起來不正確..... – 2014-08-31 15:20:57
正如@MitchWheat說,在遞歸情況下的試驗是用在遞歸調用的限制不一致並在基本情況下停止一個_before_「高」。反思。插入一些打印語句或使用調試器來查看您的心智模型中的錯誤所在。 – Gene 2014-08-31 17:29:21