Мне было поручено создать бинарный поиск в 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?
Любая помощь будет принята с благодарностью.Спасибо.