Rekursive Funktion (Verständnissfrage)

Status
Nicht offen für weitere Antworten.

Kesandal

Mitglied
Hallo zusammen,
bin recht neu in Java
und lese das Buch "Java ist auch eine Insel".
Leider verstehe ich die rekursiven Funktionen nicht ganz.

2 Beispiele:

1.
Code:
static void down1( int n ) { 
    if ( n <= 0 ) // Rekursionsende
        return; 
    System.out.print( n + ", " ); 
    down1(n-1); 
}

2.
Code:
static void down2( int n ){			
    if ( n <= 0 )
        return;
    down2(n-1); 
    System.out.print( n + ", " ); 
}

Nehmen wir als Funktionsaufruf down1(5) sowie down2(5).

Das erste Beispiel verstehe ich und die Ausgabe kann ich nachvollziehen.
Er zählt einfach von 5 runter bis 1. Ist n<=0 erreicht ist das ganze beendet.

Das zweite Beispiel verstehe ich nun nicht mehr...
Und erst recht nicht, warum das Ergebnis 1 , 2 ,3, 4 ,5 ist...

In meinen Augen würde das System.out.print nie erreicht werden..
weil der sich ja immer und immer wieder selber aufruft...

Könnt ihr mir das bitte erklären?

Besten Dank,
Kesandal

Edit: Gibt es in Eclipse irgend eine Möglichkeit (wie z.B. in C++) den Code schrittweise auszuführen?

Vielleicht würde mir dies beim Verständniss helfen.
 
S

SlaterB

Gast
> weil der sich ja immer und immer wieder selber aufruft...

aber da steht doch groß und breit
if ( n <= 0 )
return;

bei n = 0 wird abgebrochen
 

Wildcard

Top Contributor
Kesandal hat gesagt.:
Edit: Gibt es in Eclipse irgend eine Möglichkeit (wie z.B. in C++) den Code schrittweise auszuführen?
Ich beantworte dir diese Frage, dann kannst du dir die andere selbst beantworten.
Setz einen Breakpoint an eine Codezeile (Doppelklick links im Editorfenster).
Dann startest du dein Programm im Debugmodus (link neben dem Run Button).
Sobald die Zeile erreicht ist, hält die Ausführung an und du kannst mit den 'F-Tasten' navigieren (Step-Into, Step-Over,...).
Du kannst sogar den Code verändern, beim Speichern wird er dann übernommen.
Schau einfach mal in die Eclipse Hilfe.
 

Kesandal

Mitglied
hm.. Ich krieg es einfach nicht in den Kopf hinein :(

@Wildcard das mit dem Step-Into etc. hat prima geklappt...

Bei down2:
Er hat die Zeilen 2 -5 ausgeführt bis das return erreicht wurde..
Dann hab ich es aber weiter wieder nicht mehr verstanden :(
Er hat dann einfach 2 mal die 6te Zeile ausgeführt...

Könntest Du mir vielleicht bitte sagen wie ich diese Schleife non-rekursiv schreiben würde?
Vielleicht verstehe ich es dann...
 

Marco13

Top Contributor
Sei ein Computer.

Überleg' dir mal, was beim zweiten Beispiel passiert.
Code:
down2(3) // Aufruf mit n = 3
{
    if ( n <= 0 ) return; // Nicht erfüllt
    down2(n-1); // Aufruf mit n = 2
    {
        if ( n <= 0 ) return; // Nicht erfüllt
        down2(n-1); // Aufruf mit n = 1
        {
            if ( n <= 0 ) return; // Nicht erfüllt
            down2(n-1); // Aufruf mit n = 0
            {
                if ( n <= 0 ) return; // Erfüllt!
            }
            System.out.print( n + ", " ); // Stammt noch aus dem Aufruf mit n=1
        }
        System.out.print( n + ", " ); // Stammt noch aus dem Aufruf mit n=2
    }
    System.out.print( n + ", " ); // Stammt noch aus dem Aufruf mit n=3
}
 

sliwalker

Top Contributor
Moin,

nochmal in anderen Worten:


Du startest mit 5.
Es erfolgt eine Überprüfung auf kleiner gleich 0.
Dann rufst Du Dich wieder selber auf, diesmal mit 4.
System.out...mit der 5 wird noch nicht ausgeführt, aber im Hinterkopf behalten.
Wieder eine Überprüfung mit 4 auf kleiner gleich 0.
Dann mit 3,2 ,1 und schließlich mit 0.

Bei 0 gibts ein return woraufhin das System.out mit 1 ausgeführt wird, dann das mit 2, 3 usw.

Verstanden?

Die System.outs werden nur nicht sofort ausgeführt, weil etwas anderes Vorrang hat. Aber das Programm läuft im Normalfall IMMER ALLES durch.

greetz
SLi
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Rekursive Funktion und return statement Java Basics - Anfänger-Themen 3
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
U Dezimal zu Hexadezimal rekursive Funktion Java Basics - Anfänger-Themen 8
M rekursive Funktion zur Berechnung der Spiegelzahl Java Basics - Anfänger-Themen 7
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
T Rekursive Methode Java Basics - Anfänger-Themen 13
emreiu Methoden Rekursive Methoden Runter- & Hochzählen Java Basics - Anfänger-Themen 2
Viktor A. Kaiser Rekursive Algorithmen Java Basics - Anfänger-Themen 9
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
S Rekursive Kombinationen Java Basics - Anfänger-Themen 6
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
schredder Rekursive Quadratzahlen - Ergebnisprozedur Java Basics - Anfänger-Themen 1
A Rekursive Implementation eines Codes Java Basics - Anfänger-Themen 4
L Rekursive Methoden Java Basics - Anfänger-Themen 14
C Rekursive Methode in Interative Methode umwandeln Java Basics - Anfänger-Themen 17
G Rekursive Methode mit 2 Aufrufen Java Basics - Anfänger-Themen 1
J Rekursive Folge (a=a-1) Java Basics - Anfänger-Themen 9
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
M Rekursive Prüfung ob ein Array sortiert ist... Java Basics - Anfänger-Themen 4
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
D Rekursive Methode Java Basics - Anfänger-Themen 8
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
M Rekursive Methode Programmieren Java Basics - Anfänger-Themen 3
J rekursive Methode Java Basics - Anfänger-Themen 26
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
MiMa Rekursive Dateiliste erstellen mit Dateiendung(en) ?? Java Basics - Anfänger-Themen 4
S Rekursive Methode Java Basics - Anfänger-Themen 8
O Rekursive Methode Java Basics - Anfänger-Themen 4
V Methoden Rekursive Methode mit String als Rückgabe Java Basics - Anfänger-Themen 7
K Rekursive Methode Java Basics - Anfänger-Themen 1
K Rekursive Methode für Fakultät mit BigInteger Java Basics - Anfänger-Themen 10
L Rekursive Methode a * b berechnen Java Basics - Anfänger-Themen 2
L Rekursive Methode zur Berechnung der Potenz q hoch p Java Basics - Anfänger-Themen 17
J Methoden Rekursive Return Methode Java Basics - Anfänger-Themen 2
G Harmonische Rekursive Folge Java Basics - Anfänger-Themen 3
T Stack Overflow - Rekursive Fibonacci Java Basics - Anfänger-Themen 10
B Datentypen Suchbaum - Rekursive Ausgabe Java Basics - Anfänger-Themen 1
P Methoden Rekursive Methode für Potenzen Java Basics - Anfänger-Themen 2
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
S Eine rekursive Lösung Java Basics - Anfänger-Themen 4
S Int zu Hexadezimal - Rekursive Methode Java Basics - Anfänger-Themen 2
M Rekursive Suche in einem Feld Java Basics - Anfänger-Themen 11
N Rekursive Addition mit Scanner Java Basics - Anfänger-Themen 12
shiroX OOP Rekursive und Iterative Definition Java Basics - Anfänger-Themen 2
B Methoden Rekursive Methoden Java Basics - Anfänger-Themen 2
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
D Primzahlen und Rekursive Liste Java Basics - Anfänger-Themen 29
R Rekursive Methode, Files finden Java Basics - Anfänger-Themen 2
S rekursive folge verbessern Java Basics - Anfänger-Themen 2
C rekursive Methode verstehe nicht! Java Basics - Anfänger-Themen 3
S Methoden rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
E Rekursive Methode Java Basics - Anfänger-Themen 3
N Methoden Rekursive Fibonaccizahlen mit Array Java Basics - Anfänger-Themen 2
R Rekursive Ausgabe eines Binärbaums Java Basics - Anfänger-Themen 4
J Methoden Rekursive Potenz ohne Math.Pow() Java Basics - Anfänger-Themen 9
A Rekursive Methode in Iterative umwandeln Java Basics - Anfänger-Themen 6
S Labyrith Rekursive Wegsuche Java Basics - Anfänger-Themen 4
C Rekursive Methode - Ziffern in Zahl Java Basics - Anfänger-Themen 33
L iterative und rekursive Folge Java Basics - Anfänger-Themen 20
G Rekursive Methode Java Basics - Anfänger-Themen 3
A rekursive Listen in Java? Java Basics - Anfänger-Themen 5
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
E Rekursive Methode mit Zufallsarray Java Basics - Anfänger-Themen 6
E Rekursive Methode Java Basics - Anfänger-Themen 18
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
M Rekursive Methode - wo ist der Fehler? Java Basics - Anfänger-Themen 4
J rekursive methode Java Basics - Anfänger-Themen 6
H ScrollBar inaktiv / Rekursive Methode Java Basics - Anfänger-Themen 4
J Rekursive Methode Java Basics - Anfänger-Themen 11
G Rekursive Methode Java Basics - Anfänger-Themen 5
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
K Rekursive Methoden Java Basics - Anfänger-Themen 15
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
D rekursive Summenberechnung Java Basics - Anfänger-Themen 8
J Rekursive Methode: Fakultaet berechnen Java Basics - Anfänger-Themen 5
E Rekursive definierten Folge Java Basics - Anfänger-Themen 10
kulturfenster rekursive Binaere Suche Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
G Rekursive Berechnung von n über k schlägt fehl Java Basics - Anfänger-Themen 5
B Rekursive & schreiben im ArrayList Java Basics - Anfänger-Themen 2
J Rekursive Fkt. Java Basics - Anfänger-Themen 2
A Rekursive Dateisuche Java Basics - Anfänger-Themen 12
G rekursive Methode Java Basics - Anfänger-Themen 3
N rekursive Beispiele Java Basics - Anfänger-Themen 3
G rekursive u iterative Methode Java Basics - Anfänger-Themen 8
G Rekursive Methode Java Basics - Anfänger-Themen 7
ven000m Rekursive Funktionen - Frage Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben