Программа бинарного поиска возвращает неправильную позицию - PullRequest
1 голос
/ 15 апреля 2020

Я написал рекурсивную программу для бинарного поиска, так как вы видите, что я пытаюсь найти позицию цели = 21 в данном массиве, которая должна вернуть мне позицию как 2. Однако мой вывод равен 1. Пока я отлаживаю, он совпадает att arr [start] = target, однако это был прямой переход к строке findTheNumber (arr, mid + 1, end, target); затем на следующей строке, а затем вернитесь в середину .. Просто интересно, почему мое возвращение прерывается при «начале старта»

 package Recursion;

 public class BinarySearch {
 static int  mid = 0;

 public static int findTheNumber(int[] arr, int start, int end, int target) {


    if (arr[start] == target) {
        return start;
    }

    mid = (start + end) / 2;

    if (arr[mid] == target) {
        return mid;
    } 

    if (target >arr[mid]) {
            findTheNumber(arr, mid + 1, end, target);
        } else if (target <arr[mid]) {
            findTheNumber(arr, start, mid-1, target);
        }
        return mid;
    }



public static void main(String[] args) {
    int[] arr = { 10, 12,21 };
    int start = 0;
    int end = arr.length - 1;

    int target = 21;

    System.out.println(findTheNumber(arr, start, end, target));

}

}

1 Ответ

6 голосов
/ 15 апреля 2020
if (target >arr[mid]) {
    findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
    findTheNumber(arr, start, mid-1, target);
}

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

if (target >arr[mid]) {
    return findTheNumber(arr, mid + 1, end, target);
} else if (target <arr[mid]) {
    return findTheNumber(arr, start, mid-1, target);
}
...