当搜索所传递的数组中不存在的单词时,该函数将导致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

问题是,当您在二进制搜索数组时,是低位递增还是高位递减,因此,如果要搜索的单词不在数组中,低位将继续递增,直到其通过高位值为止。

对不起,如果我误解了你的问题。

09-10 03:24
查看更多