Бинарный поиск с использованием Recusion - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь создать алгоритм двоичного поиска с использованием рекурсии в Java, когда отладка, кажется, все в порядке, пока он не найдет значение и не должен вернуть индекс необходимого ключа.Однако по какой-то причине он пропускает оператор return и переходит к нижнему оператору return.

public int binSearch(int key, int L, int R) {

    int mid =(R + L)/2;

    if (R < L) {
        return -1;
    }

    if (A[mid] == key) {
        return mid;
    }

    if (key > A[mid]) {
        binSearch(key, mid + 1, R);
    }

    if (key < A[mid]) {
        binSearch(key, L, mid - 1);
    }
   return -1;
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Мне удалось спасти это из старого сообщения .Я знаю, что это не решает вашу проблему, но показывает вам другой способ решения этой проблемы.

public static int binarySearch(int[] a, int target) {
    return binarySearch(a, 0, a.length-1, target);
}

public static int binarySearch(int[] a, int start, int end, int target) {
    int middle = (start + end) / 2;
    if(end < start) {
        return -1;
    } 

    if(target==a[middle]) {
        return middle;
    } else if(target<a[middle]) {
        return binarySearch(a, start, middle - 1, target);
    } else {
        return binarySearch(a, middle + 1, end, target);
    }
}
0 голосов
/ 16 октября 2018

Вам не хватает некоторых операторов возврата (когда вы вызываете binSearch рекурсивно)

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