Вопрос к домашней задаче: нужен только совет для базового случая, чтобы сгенерировать исключение для рекурсивного двоичного поиска, когда слово не существует - PullRequest
0 голосов
/ 23 февраля 2019

При поиске слова, которого нет в переданном массиве, функция вызовет 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);

}

1 Ответ

0 голосов
/ 23 февраля 2019

Я не уверен, правильно ли я понял вопросы, но если вы имеете в виду, что условие mid <= 0 не вызывает исключение, и функции продолжают работать до тех пор, пока оно не вызовет StackOverFlow, тогда просто используйте вместо этого условие: low >= high

Дело в том, что если во время двоичного поиска в массиве вы либо увеличиваете низкое значение, либо уменьшаете высокое, то есть, если искомое слово отсутствует в массиве, значение low будет продолжать увеличиваться до тех пор, покаон передает значение high.

Извините, если я неправильно понял ваш вопрос.

...