Verständnisproblem der Rekursion bei Arrays

M

Mika34

Bekanntes Mitglied
Schönen Abend an Alle,
Ich versuche mir gerade die Rekursion mittels meines Java für Anfänger Buch näher zu bringen. Das Prinzip davon habe ich auch verstanden, das man quasi immer wieder in die eigentliche Methode einsetzt mit einer Variable die man kontinuierlich verringert.
Jedoch scheitert es bei mir am Verständnis der Rekursion bei Arrays. Das Beispiel ist wie folgt aufgebaut:
Java:
public class Summation {
public static int sum(int[] array) {
return sum(array, array.length - 1 );
}
public static int sum(int[] array, int i) {
if ( i < 0 ) {
return 0 ;
}
return array[i] + sum(array, i - 1 );
}
}
Dadurch werden alle Elemente des Arrays rekursiv zu einer Summe addiert. Ich verstehe hierbei jedoch nicht, wieso nun bei

return sum(array, array.length - 1 );

auf einmal die Länge des Arrays eine Rolle spielt und wieso das nun durch ein Komma getrennt wird. Ich dachte eigentlich, das dafür ein zweiter Parameter in der Methodensignatur definiert sein müsste. Außerdem verstehe ich auch nicht wieso nun bei
return array[i] + sum(array, i - 1 );

von i 1 abgezogen wird und das ebenfalls durch ein Komma getrennt wird.

Ich bin über jede Hilfe tierisch dankbar :)

Grüße
 
H

httpdigest

Top Contributor
mmer wieder in die eigentliche Methode einsetzt mit einer Variable die man kontinuierlich verringert
Das kann man so nicht verallgemeinern. Rekursion bedeutet erstmal nur, dass die Methode sich direkt oder indirekt selbst aufruft.
Welche Parameter die Methode nun hat und was da bei jedem rekursiven Aufruf mit den Parametern passiert, ist erstmal irrelevant.

Auch gibt es keinen Spezialfall "Rekursion mit Arrays". Eine rekursive Methode ist genauso wie jede andere Methode.
Sie kann beliebige Parameter bekommen und beliebig implementiert sein, mit der Ausnahme, dass sie sich irgendwann direkt oder indirekt selbst wieder aufruft.

Um den von dir gezeigten Code zu verstehen, musst du noch wissen, was "Überladung" von Methoden genau ist.
In deinem Beispiel werden ja zwei `sum` Methoden definiert. Einmal eine, die nur ein Array als Parameter bekommt und dann noch eine, die ein Array und einen int bekommt.
Letztere ist die eigentliche rekursive Methode und sie wird von der ersteren initial aufgerufen.

Die rekursive Methode (die letztere mit den zwei Parametern) benötigt natürlich erstmal das Array selbst und dann aber auch den Index, für den jeder Aufruf dieser Methode "zuständig" ist. Jeder rekursive Aufruf dieser Methode sorgt ja dafür, dass der Index `i` aus dem Array gelesen wird und per `+` mit dem Ergebnis aller vorherigen Elemente verknüpft wird, sodass man eine Summe über alle Arrayelemente erhält.
 
X

Xyz1

Gast
Naja - Du hast
- eine Abbruchbedingung, den Rekusionsanfang
- einen deakkumulierenden Parameter und
- einen Rekursionsschritt, die Addition

Zusammen hast Du also eine rekursive Methode und alle Elem des Arrays werden aufsummiert.
 
M

Mika34

Bekanntes Mitglied
Aber wieso wird das nun über ein "," getrennt, das verstehe ich einfach nicht
 
H

httpdigest

Top Contributor
Das Komma dient in Java bei Methodenaufrufen dazu, die einzelnen aktuellen Argumente voneinander zu trennen. Es wird also hier eine Methode aufgerufen, die zwei Parameter erwartet. Du solltest dir nochmal die grundsätzliche Syntax von Java angucken.
 
mihe7

mihe7

Top Contributor
Du hast ja zwei sum-Methoden: die eine verlangt einen Parameter und die andere zwei Parameter.
 
M

Mika34

Bekanntes Mitglied
Bei der zweiten Methode ist mir durchaus bewusst wieso da zwei Parameter sind, jedoch verstehe ich das nicht bei der ersten Methode. Wird die erste Methode, dann quasi von der zweiten Methode "überschrieben"?
 
H

httpdigest

Top Contributor
Um den von dir gezeigten Code zu verstehen, musst du noch wissen, was "Überladung" von Methoden genau ist.
In deinem Beispiel werden ja zwei `sum` Methoden definiert. Einmal eine, die nur ein Array als Parameter bekommt und dann noch eine, die ein Array und einen int bekommt.
Letztere ist die eigentliche rekursive Methode und sie wird von der ersteren initial aufgerufen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
T Verständnisproblem mit Assoziationen Java Basics - Anfänger-Themen 7
A Erste Schritte Verständnisproblem Java Basics - Anfänger-Themen 5
S Verständnisproblem Aufgabe Java Basics - Anfänger-Themen 9
S Model View Controller: Verständnisproblem Java Basics - Anfänger-Themen 13
temi Verständnisproblem Class.forName() Java Basics - Anfänger-Themen 3
2 Verständnisproblem bei Anwendung von Lower Bounded Wildcards Java Basics - Anfänger-Themen 5
V Verständnisproblem Java Basics - Anfänger-Themen 22
L [Verständnisproblem] Array wird trotz void rückgabe verändert. Java Basics - Anfänger-Themen 5
A Verständnisproblem Ausgabe Do-While-Schleife Java Basics - Anfänger-Themen 3
J Verständnisproblem einer Methode Java Basics - Anfänger-Themen 20
M Konstruktur - Verständnisproblem Java Basics - Anfänger-Themen 4
C Postinkrement und println - Verständnisproblem Java Basics - Anfänger-Themen 8
T Verständnisproblem beim Vigenere-Verfahren Java Basics - Anfänger-Themen 2
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
N Verständnisproblem InsertionSort. Java Basics - Anfänger-Themen 2
D Verständnisproblem Java Basics - Anfänger-Themen 2
B VerständnisProblem mit Beispielaufgabe aus Buch Java Basics - Anfänger-Themen 1
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
FrankR2 Grundsätzliches Verständnisproblem: Java 32/64-bit; Windows 7/8, 32/64-bit-System Java Basics - Anfänger-Themen 5
S Verständnisproblem bei Interfaces Java Basics - Anfänger-Themen 6
V Verständnisproblem Java Basics - Anfänger-Themen 5
V Arrays-verständnisproblem Java Basics - Anfänger-Themen 4
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
S Verständnisproblem einer Übungsaufgabe Java Basics - Anfänger-Themen 6
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
P Verständnisproblem main Methode Java Basics - Anfänger-Themen 9
S Klassen Verständnisproblem Konstruktor Java Basics - Anfänger-Themen 7
I e.getMessage(); - Verständnisproblem Java Basics - Anfänger-Themen 6
lesni Vererbung Vererbung - Verständnisproblem Java Basics - Anfänger-Themen 2
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
J Verständnisproblem Methoden-Kettung Java Basics - Anfänger-Themen 3
A Vererbung Verständnisproblem bei Übung Java Basics - Anfänger-Themen 5
E Verständnisproblem Typkonvertierung Java Basics - Anfänger-Themen 4
S OOP Verständnisproblem Umsteiger Java Basics - Anfänger-Themen 22
C Array Verständnisproblem Java Basics - Anfänger-Themen 3
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
D : ? Operator -Verständnisproblem Java Basics - Anfänger-Themen 24
G Verständnisproblem: Exceptions Java Basics - Anfänger-Themen 17
L Eclipse verlangt "{" nach ";"... Verständnisproblem Java Basics - Anfänger-Themen 5
D charAt(i) verständnisproblem Java Basics - Anfänger-Themen 4
D Verständnisproblem Marken und Schleifen Java Basics - Anfänger-Themen 19
M Verständnisproblem bei Ternären Operanten bzw. Bedingungsoperator Java Basics - Anfänger-Themen 8
T Datentypen Verständnisproblem mit main Methode Java Basics - Anfänger-Themen 3
M Verständnisproblem Threads Java Basics - Anfänger-Themen 7
X Threads und synchronized - Verständnisproblem Java Basics - Anfänger-Themen 3
W ArrayLists: Verständnisproblem bei remove() Java Basics - Anfänger-Themen 2
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8
A Postinkrement-Verständnisproblem Java Basics - Anfänger-Themen 12
R Iterator Liste, Verständnisproblem Java Basics - Anfänger-Themen 4
1 Verständnisproblem mit Foreach Java Basics - Anfänger-Themen 4
B Verständnisproblem bei Vererbung Java Basics - Anfänger-Themen 3
W generisches Programmieren - Verständnisproblem Java Basics - Anfänger-Themen 4
A Verständnisproblem Nr 2 Java Basics - Anfänger-Themen 14
A Verständnisproblem Java Basics - Anfänger-Themen 6
A Array Verständnisproblem Java Basics - Anfänger-Themen 8
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
M Verständnisproblem mit der Klasse Thread Java Basics - Anfänger-Themen 10
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
G Verständnisproblem: Code kompelieren und interpretieren Java Basics - Anfänger-Themen 3
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
G Verständnisproblem Türme von Hanoi Java Basics - Anfänger-Themen 4
G Verständnisproblem Serverinput einlesen. Java Basics - Anfänger-Themen 4
J Array und Schleifen Verständnisproblem Java Basics - Anfänger-Themen 25
G Verständnisproblem Java Basics - Anfänger-Themen 4
N Verständnisproblem: Mehrere Objekte einer Klasse erstellen Java Basics - Anfänger-Themen 2
S SelectionListener + repaint().Verständnisproblem ;) Java Basics - Anfänger-Themen 7
V Verständnisproblem mit Abstrakten zu Konkreten Klassen Java Basics - Anfänger-Themen 7
A Problem mit der Stringgrösse, bzw Verständnisproblem? Java Basics - Anfänger-Themen 14
A Verständnisproblem mit ScrollPanel Java Basics - Anfänger-Themen 3
R Verständnisproblem mit Hibernate Java Basics - Anfänger-Themen 2
T Verständnisproblem mit equals() Java Basics - Anfänger-Themen 4
N datei byte für byte auslesen (verständnisproblem) Java Basics - Anfänger-Themen 2
T Verständnisproblem packages/import Java Basics - Anfänger-Themen 9
Chucky Lineare Listen Programm Verständnisproblem Java Basics - Anfänger-Themen 38
D Verständnisproblem Java Basics - Anfänger-Themen 6
S for Schleifen: Verständnisproblem Java Basics - Anfänger-Themen 15
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
bernd while-Schleife: Verständnisproblem Java Basics - Anfänger-Themen 7
S verständnisproblem drucken Java Basics - Anfänger-Themen 11
G GridBagLayout: Verständnisproblem Java Basics - Anfänger-Themen 5
Kirby_Sike Rekursion Java Basics - Anfänger-Themen 7
N for Schleife durch Rekursion ersetzen Java Basics - Anfänger-Themen 6
X Rekursion Java Basics - Anfänger-Themen 3
H Rekursion Java Basics - Anfänger-Themen 2
D Erste Schritte Rekursion Java Basics - Anfänger-Themen 13
M Rekursion Tage Ansteckung gesamte Bevölkerung Java Basics - Anfänger-Themen 15
M Java Rekursion Java Basics - Anfänger-Themen 9
G Java Rekursion Java Basics - Anfänger-Themen 5
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
N Rekursion Java Basics - Anfänger-Themen 18
X Rekursion Rätsel Java Basics - Anfänger-Themen 4
N Klassen Rekursion mit Feldern von Objekten Java Basics - Anfänger-Themen 14
W Rekursion Java Basics - Anfänger-Themen 0
D Konsolenausgabe Zahlenfolge Rekursion Java Basics - Anfänger-Themen 3
J Ping Pong Methode mit Rekursion Java Basics - Anfänger-Themen 1
N Rekursion Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Anzeige

Neue Themen


Oben