2016-10-12 6 views
0

Für den Eingang binarySearch (2, A, 9), wobei A = {2,6,7,7,11,15,25,37,45}, gibt das Programm die Ausgabe " Nicht vorhanden ", wenn es" Geschenk "geben sollte. Was mache ich falsch?Binäre Suche mit falschem Ausgang

Hier ist mein Code:

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

Weil Ihre letzte Zeile zurückgibt 'Nicht zurück egal present' was rekursive Aufrufe zurückzukehren. – tkausl

+0

Verwenden Sie geschweifte Klammern und Sie werden keine Fehler wie diese haben. – eldo

+0

Nur realisiert. Scheint jetzt so eine dumme Frage. Vielen Dank! – kudesiaji

Antwort

-1

Ihre vergessen entlang return Anweisung hinzufügen mit der else if Rekursion ruft denn jetzt wird es nur die Present nur zurück, wenn x in Mitte gefunden, Rest der Arbeiten Anrufe aber nichts zurück, so sollte es seine

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

Fehlende return Anweisung in dem rekursiven Aufruf:

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

Sie müssen den rekursiven Aufruf

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


     } 
     }