当搜索所传递的数组中不存在的单词时,该函数将导致StackOverflow,然后我才能引发自定义异常。我不想以“应该”找到单词之前需要进行几次迭代的平均次数来对中间进行硬编码。
public int recSearch(String[] words, String wordToFind) throws ItemNotFoundException {
if (count == 0) {
low = 0;
high = words.length - 1;
}
count = 1;
super.incrementCount();
mid = (low + high) / 2;
if (mid <= 0)
throw new ItemNotFoundException("Item not found");
if (words[mid].equals(wordToFind))
return mid;
else if (words[mid].compareTo(wordToFind) < 0) {
low = mid + 1;
} else {
high = mid - 1;
}
return recSearch(words, wordToFind);
}
最佳答案
我不确定我是否正确理解了问题,但是如果您是说条件mid <= 0
不会引发异常,并且这些函数会继续运行直到导致StackOverFlow,然后直接使用此条件即可:low >= high
问题是,当您在二进制搜索数组时,是低位递增还是高位递减,因此,如果要搜索的单词不在数组中,低位将继续递增,直到其通过高位值为止。
对不起,如果我误解了你的问题。