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
Rekursive Methode:
    private boolean contains(final T value, int index) {
        if (index == array.length) {
            return false;
        } else {
            return array[index] == value || contains(value, index++);
        }
    }
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++);
            }
        }
 

httpdigest

Top Contributor
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:

Zeppi

Aktives Mitglied
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?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
B Rekursion Allgemeine Java-Themen 11
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
J Denkfehler Rekursion Allgemeine Java-Themen 5
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
L Rekursion Binärbaum Allgemeine Java-Themen 7
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
Weiti Swingworker und Rekursion Allgemeine Java-Themen 8
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4
S Stackoverflowerror Allgemeine Java-Themen 2
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
G StackoverflowError beim laden einer FXMML Datei Allgemeine Java-Themen 1
G maven 3.1.1 StackOverflowError Allgemeine Java-Themen 3
A Binäre Suche im Array mit StackOverflowError Allgemeine Java-Themen 3
H StackOverflowError erst ab 87 Array Elementen Allgemeine Java-Themen 4
E Interpreter-Fehler StackOverflowError Allgemeine Java-Themen 3
M StackOverflowError Allgemeine Java-Themen 9
E StackOverflowError Allgemeine Java-Themen 8
F Stackoverflowerror beheben Allgemeine Java-Themen 5
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
J java.lang.StackOverflowError Debugging? Allgemeine Java-Themen 51
S StackOverflowError - Brett vor'm Kopf Allgemeine Java-Themen 6
T Profifrage: java.lang.StackOverflowError bei BigInteger Allgemeine Java-Themen 27
G StackOverflowError Allgemeine Java-Themen 6
F Warum StackOverFlowError? Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben