Verständnisproblem der Rekursion bei Arrays

Diskutiere Verständnisproblem der Rekursion bei Arrays im Java Basics - Anfänger-Themen Bereich.
M

Mika34

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

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

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

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

httpdigest

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

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

Mika34

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

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.
 
Thema: 

Verständnisproblem der Rekursion bei Arrays

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben