2016-10-12 4 views
0

Для входного двоичного поиска (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"); 
    } 
} 
+4

Потому что ваша последняя строка не возвращает 'Не present' независимо от того, что возвращать рекурсивные вызовы. – tkausl

+0

Используйте фигурные скобки, и у вас не будет таких ошибок. – eldo

+0

Просто понял. Кажется, такой глупый вопрос сейчас. Спасибо! – kudesiaji

ответ

-1

Вы забыли добавить 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); 

    } 
} 
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); 
0

вам необходимо вернуть рекурсивный вызов

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); 


     } 
     }