Rekursion StackOverflowError

Zeppi

Aktives Mitglied
Hallo, ich führe eine Rekursion durch und erhalte immer einen StackOverflowError. Die Methode wird mit einem index = 0 aufgerufen. Ich sehe aber nicht, wieso ich quasi in einer endlosen Schleife gefangen bin, denn eigentlich sollte die Methode doch abbrechen. Ich habe es auch mit einer anderen Variante versucht, aber auch hier bekomme ich den Error.
Vielleicht kann mir jemand ja weiter helfen. Danke
[CODE lang="java" title="Rekursive Methode"] private boolean contains(final T value, int index) {
if (index == array.length) {
return false;
} else {
return array[index] == value || contains(value, index++);
}
}[/CODE]
[CODE lang="java" title="Anderer Versuch"] private boolean contains(final T value, int index) {
if (index < array.length) {
if (array[index] == value) {
return true;
} else {
return contains(value, index++);
}
}[/CODE]
 
index++ erhöht zwar den Wert der Variablen index um 1, allerdings ist der Wert des Ausdrucks `index++` der Wert, den die Variable index vor der Inkrementierung hatte. Der rekursive Aufruf der Methode `contains` erhält also effektiv den Wert von index.
Das kannst du beheben, indem du nicht den Postinkrement- sondern den Präinkrementoperator verwendest - oder indem du einfach `index + 1` schreibst, was in diesem Fall klarer ist, da index nachher sowieso nicht mehr verwendet wird.
 
Zuletzt bearbeitet:
index++ erhöht zwar den Wert der Variablen index um 1, allerdings ist der Wert des Ausdrucks `index++` der Wert, den die Variable index vor der Inkrementierung hatte. Der rekursive Aufruf der Methode `contains` erhält also effektiv den Wert von index.
Das kannst du beheben, indem du nicht den Postinkrement- sondern den Präinkrementoperator verwendest - oder indem du einfach `index + 1` schreibst, was in diesem Fall klarer ist, da index nachher sowieso nicht mehr verwendet wird.
Ah Klasse, danke. Ich wusste nicht, dass das einen Unterschied macht. Eine Frage hätte ich aber noch, was genau wäre der Präinkrementoperator?
 

Zurück
Oben