#java #binary-search
#java #двоичный поиск
Вопрос:
Для входного двоичного поиска (2, A, 9), где A = {2,6,7,7,11,15,25,37,45}, программа выдает вывод «Not Present», когда он должен выдавать «Present». Что я делаю не так?
Вот мой код:
String binarySearch(int x, int[] A, int n)
{
if(n==0)
return ("Not present");
else
{
int mid = n/2;
if(x==A[mid])
return ("Present");
else if (x<A[mid])
binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
else
binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);
return ("Not present");
}
}
Комментарии:
1. Потому что ваша последняя строка возвращает
Not present
независимо от того, что возвращают рекурсивные вызовы.2. Используйте фигурные скобки, и у вас не будет подобных ошибок.
3. Только что понял. Сейчас кажется таким глупым вопросом. Спасибо!
Ответ №1:
Отсутствующий return
оператор в рекурсивном вызове:
else if (x<A[mid])
return binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
else
return binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);
Ответ №2:
вам нужно вернуть рекурсивный вызов
String binarySearch(int x, int[] A, int n)
{
if(n==0)
return ("Not present");
else
{
int mid = n/2;
if(x==A[mid])
return ("Present");
else if (x<A[mid])
return binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
else
return binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);
}
}
Ответ №3:
Вы забыли добавить return
оператор вместе с else if
вызовами рекурсии, потому что теперь он просто вернет Present
единственное, если x
найдено в середине, остальные вызовы работают, но ничего не возвращают, так что так и должно быть
static String binarySearch(int x, int[] A, int n)
{
if(n==0)
return ("Not present");
else
{
int mid = n/2;
if(x==A[mid])
return ("Present");
else if (x<A[mid])
return binarySearch(x, Arrays.copyOfRange(A,0,mid),mid);
else
return binarySearch(x, Arrays.copyOfRange(A,mid,n),n-mid);
}
}