Бинарный поиск должен возвращать значение, хотя значение возвращается - PullRequest
0 голосов
/ 21 декабря 2018

Мне было поручено создать бинарный поиск в Java с использованием рекурсии.Однако, хотя я указываю возвращаемые значения, он все равно говорит мне, что я должен вернуть результат типа intВот соответствующие части моего кода:

Я пытался добавить возврат за пределы операторов if-else, только чтобы получить ошибку StackOverflowError.

    result = binarySearch(numbers, 0, numbers.length-1, search);

    if(result==-1)
        System.out.println("Value not found.");
    else
        System.out.println(search + " was found at index " + result);

}

public static int binarySearch(int n[], int f, int l, int val) {        
    if(f>l) 
        return -1;
    else {
        int mid = (f+l)/2;
        if(val == mid)
            return n[mid];

        else {
            if(val < mid)
                binarySearch(n, f, mid-1, val);
            if(val > mid)
                binarySearch(n, f, mid+1, val);
        }

    }
}

Я ожидал следующего: aзначение search собирается от пользователя и передается в метод binarySearch.Затем метод binarySearch должен выполнить поиск в моем массиве int numbers от начального значения 0 до конечного значения, чтобы найти это значение.В методе binarySearch я считаю, что моя логика верна.Если начальное нижнее значение больше начального верхнего значения, это означает, что поиск завершен и результат не найден, поэтому верните -1.В противном случае элемент находится в массиве, поэтому создайте значение mid , чтобы установить середину для поиска.Если искомое значение равно среднему, вернуть индекс, по которому оно было найдено.Если значение меньше среднего, уменьшите старшее значение и повторите поиск, так как число должно быть слева от середины.Если значение больше среднего, увеличьте его и повторите, как должно быть справа.Я прав с моим пониманием этого?Почему он не распознает возврат внутри операторов if-else?

Любая помощь будет принята с благодарностью.Спасибо.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Сравните val с n [mid], а не mid.

0 голосов
/ 21 декабря 2018

Логика верна, вам нужно будет только вернуться после завершения рекурсии, заменив два из сравниваемых val и mid на if / else.Измененная рекурсивная функция будет выглядеть следующим образом:

public static int binarySearch(int n[], int f, int l, int val) {
    if(f>l){
        return -1;
    } else {
        int mid = (f+l)/2;
        if(val == mid) {
            return n[mid];
        } else {
            if(val < mid) {
                return binarySearch(n, f, mid-1, val);
            } else {
                return binarySearch(n, mid+1, l, val);
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...