嗨,我被要求在大學爲我的數據結構類編寫一個遞歸二進制搜索,但是我遇到了一個小問題。當我搜索一個超出範圍的數字(在這種情況下超過10)時,它會拋出一個超出界限的異常。我明白爲什麼它會這樣做,因爲陣列沒有> 10個空格,但我不知道如何解決它。有任何想法嗎?Java遞歸二進制搜索拋出界限異常?
即時搜索的數組是一個有序數組1 - 10(索引0 - 9)。
public int recursiveBinarySearch(int[] anArray, int searchedNumber, int min, int max) {
if (min > max)
{
System.out.println(searchedNumber + " is not present in tha array.");
//return -1 to show that the value has not been found
return -1;
}
// find the centre of the array
int centre = (min + max)/2;
if (anArray[centre] == searchedNumber)
{
System.out.println(searchedNumber + " was found at index " + centre);
return centre;
}
if (anArray[centre] < searchedNumber)
{
return recursiveBinarySearch(anArray, searchedNumber, centre+1, max);
}
return recursiveBinarySearch(anArray, searchedNumber, min, centre-1);
}
二分查找不應該使用/ 2它應該使用按位>>。 – Woot4Moo 2010-10-25 17:35:08
其實它應該使用>>>。 – helpermethod 2010-10-25 18:12:14
爲什麼?你不在乎比特是什麼樣子。你在乎數字是什麼(以及它的一半是什麼)。這種優化應該留給編譯器/ jvm。 – ILMTitan 2010-10-25 19:07:58