2016-09-28 5 views
1

Ich bin ein Übersetzungsfehler rekursiv in binärer Such Implementierung immerCompile Zeitfehler in Binary Search rekursive Implementierung

Hier ist meine Methode:

public static int binarySearch(int[] a, int start, int end, int x) { 
    if (start > end) { 
     return -1; 
    } 
    int mid = (start + end)/2; 
    if (a[mid] == x) { 
     return mid; 
    } else if (a[mid] > x) { 
     binarySearch(a, start, mid - 1, x); 
    } else { 
     binarySearch(a, mid + 1, end, x); 
    } 
} 

Ich gebe zwei Basisfall für diese und die Rückkehr zwei int Werte, aber immer noch bekomme ich Fehler, warum das passiert. Irgendwelche verwandten Gedanken würden geschätzt werden.

Dank

+0

Was ist der Fehler genau und wo tritt es auf? – Sentry

Antwort

2

Was denken Sie beim ersten Aufruf zurückgegeben wird, wenn sowohl start > end und a[mid] == xfalse sind?

Sie benötigen eine rekursive Aufrufe und zurück, so dass der gefundene Wert (oder -1) wird durch die Rekursion Stack-Frames propagieren zurück:

public static int binarySearch(int[] a, int start, int end, int x) { 
    if (start > end) { 
     return -1; 
    } 
    int mid = (start + end)/2; 
    if (a[mid] == x) { 
     return mid; 
    } else if (a[mid] > x) { 
     return binarySearch(a, start, mid - 1, x); // return here 
    } else { 
     return binarySearch(a, mid + 1, end, x); // return here 
    } 

} 
+0

Danke es funktioniert –

+1

keine Sorgen Kumpel, froh zu helfen – nem035

+1

buchstäblich Stack Überlauf ist ein besserer Ort bcoz von euch Jungs –

-1

binarySearch(a, start, mid - 1, x);UND In Ihren Aussagen binarySearch(a, mid + 1, end, x);, sind Sie gerade Aufruf der Funktion binarysearch. Statt dessen müssen Sie die Ausgabe dieser rekursiven Aufrufe zurückgeben.

also der richtige Weg, dies zu tun ist returnbinarySearch(a, start, mid - 1, x);zu verwenden undreturnbinarySearch(a, mid + 1, end, x);

+0

Warum geben Sie mir die gleiche Antwort auf eine andere Weise, die unten beschrieben wird –