StackOverflow bei Rekursion

Chris20

Mitglied
Hallo,

ich habe versucht eine Methode zu implementieren, die ein sortiertes Array rekursiv nach einer Zahl durchsucht. Jedoch kommt es zu einem StackOverflow-Error. Ich habe schon auf allen mir bekannten Wegen versucht, eine Lösung zu finden, es klappt aber einfach nicht.

Hier mein Code:
Java:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
        if (0 <= startposition == false || startposition <= endposition == false || endposition <= array.length == false){
            throw new IllegalArgumentException();
        } else {
            int mitteArray = array.length / 2;
            if (gesucht == array[mitteArray]){
                return gesucht;
            } else if (gesucht > array[mitteArray]){
                optimierteSuche(gesucht, array, mitteArray + 1, endposition);
                return gesucht;
            } else {
                optimierteSuche(gesucht, array, startposition, mitteArray-1);
                return gesucht;
            }
        }
    }

in der Main habe ich ein sortiertes Array angelegt und die Methode anschließend aufgerufen und alle Parameter übergeben.

Danke schon einmal im Voraus!
 
Als Hinweis fuer solche Faelle, lass' dir die Parameter am Anfang der Funktion einfach ausgeben. Dann siehst du genau mit welche Aufrufe mit welchen Parametern gemacht werden.

In diesem Fall wuerde ich raten, dass Zeile 5 das Problem ist, du uebergibst ja immer das gleiche in den naechsten Funktionsaufruf.
 
Du hast einige logische ( und damit besonders hartnäckige 🙂 ) Fehler in deinen Code eingebaut. Ich möchte dir nicht sofort die Lösung verraten, aber ich kann dir ein paar Tipps geben:

1. Die Mitte zwischen z.B. der startPosition 5 und endPosition 8 ist nicht array.length / 2.
2. dein return-wert gibt immer nur 'gesucht' zurück, allerdings willst du ja das ergebnis von optimierteSuche zurückgeben.

Ich denke das sind schon zwei wichtige Punkte. Denk nochmal darüber nach und frag, wenn du doch nicht drauf kommst. Wenn man zu langer an einem Problem sitzt ist das irgendwann unökonomisch.

LG
 
Naja, wenn a <= b nicht gilt, dann gilt a > b, was sich auch als b < a schreiben lässt.

Java:
if (startposition < 0 || endposition < startposition || array.length < endposition) {
    throw new IllegalArgumentException();
}

// persönlich würde ich hier normal weiter schreiben - ohne else
 

Zurück
Oben