Methoden Rekursive Methoden

B

Boby

Neues Mitglied
Hallo alle miteinander!

Ich habe die Aufgabe gestellt bekommen, die Türme von Hanoi als Programm zu schreiben. Die Theorie hab ich soweit verstanden. Ich bräuchte noch ein kleines bisschen Hilfe beim verstehen des Quellcodes.

Java:
public class RekursionTester {

	/*Methode, die zeigt, wie eine rekursive(rueckfuehrende) Methode
	funktioniert*/
	public static void test(int a){
		//Wenn a 0 ist, gib diesen String aus.
		if (a == 0){
		System.out.println("There is nothing to do.");
		}
		/*Wenn a groesser 0 ist rufe die eigene Methode auf und ziehe bei a - 1 ab.
		 * 
		 */
		else if(a > 0 ){
			test(a - 1);
			System.out.println(a);
		}
		
		
	}
	public static void main(String args[]){
		test(2);
	}

Ich war erst sehr verwundert als mir die Reihenfolge umgedreht angezeigt wurde. Wenn ich [JAVA=42]System.out.println(a);[/code] über [JAVA=42]test(a - 1);[/code] setze, wird es mir richtig angezeigt. Meine frage dazu. Was passiert eigentlich im Hintergrund, dass das Programm am Ende noch einmal in die else if bedingung springt und die Variablen ausgibt?
 
G

Gucky

Top Contributor
Es wird immer direkt vor dem Sysout verzweigt. Deshalb wird dieser nicht erreicht, bis irgendeine Methode "ausläuft" d. h. bis zum Ende läuft. Dann wird wieder an den Punkt gesprungen, von dem der Interpreter gekommen ist.

Also der Programmablauf bei deinem Beispiel mit a=2 wäre:
ERSTER AUFRUF
a!=0: überspringe if Anweisung
a>0: übergib Methode test() a-1

ZWEITER AUFRUF
a!=0: überspringe if Anweisung
a>0: übergib Methode test a-1

DRITTER AUFRUF
a==0: Gib englischen Text aus
Methode beendet. Gehe zu zweitem Aufruf

ZWEITER AUFRUF
Gib a aus //1
Methode beendet. Gehe zu erstem Aufruf

ERSTER AUFRUF
gib a aus //2
Methode beendet. Gehe zu übergeordneter Methode
 
Tobse

Tobse

Top Contributor
Hallo alle miteinander!

Ich habe die Aufgabe gestellt bekommen, die Türme von Hanoi als Programm zu schreiben. Die Theorie hab ich soweit verstanden. Ich bräuchte noch ein kleines bisschen Hilfe beim verstehen des Quellcodes.

Java:
public class RekursionTester {

	/*Methode, die zeigt, wie eine rekursive(rueckfuehrende) Methode
	funktioniert*/
	public static void test(int a){
		//Wenn a 0 ist, gib diesen String aus.
		if (a == 0){
		System.out.println("There is nothing to do.");
		}
		/*Wenn a groesser 0 ist rufe die eigene Methode auf und ziehe bei a - 1 ab.
		 * 
		 */
		else if(a > 0 ){
			test(a - 1);
			System.out.println(a);
		}
		
		
	}
	public static void main(String args[]){
		test(2);
	}

Ich war erst sehr verwundert als mir die Reihenfolge umgedreht angezeigt wurde. Wenn ich [JAVA=42]System.out.println(a);[/code] über [JAVA=42]test(a - 1);[/code] setze, wird es mir richtig angezeigt. Meine frage dazu. Was passiert eigentlich im Hintergrund, dass das Programm am Ende noch einmal in die else if bedingung springt und die Variablen ausgibt?

Veranschauliche dir in Textform, was die Methode test macht: Wenn der Parameter (
Code:
a
) 0 ist, wird n
Code:
othing to do
ausgegeben. Wenn nicht wird test mit
Code:
a - 1
aufgerufen. Sprich:

Wenn der Parameter nicht 0 ist, wird 1 davon abgezogen, sonst wird abgebrochen.
Wenn der Parameter nicht 0 ist, wird 1 davon abgezogen, sonst wird abgebrochen.
Wenn der Parameter nicht 0 ist, wird 1 davon abgezogen, sonst wird abgebrochen.
Wenn der Parameter nicht 0 ist, wird 1 davon abgezogen, sonst wird abgebrochen.
Wenn der Parameter nicht 0 ist, wird 1 davon abgezogen, sonst wird abgebrochen.
...
und wenn du jede Runde 1 davon abziehst ist der Parameter eben irgendwann 0.

So, nun zu der Reihenfolge der ausgabe:
Angenommen [c]a = 1[/c]. ich ersetze jetzt mal den aufruf auf test mit dem entsprechenden Quellcode und alle [c]a[c] mit ihren entsprechenden Werten:
Java:
// aufruf: test(1);

if (1 == 0) // false
{
    System.out.println("nothing to do");
}
else if (1 > 0) // true
{
    // test(1 - 1) wird aufgerufen
    if (0 == 0)
    {
        System.out.println("nothing to do");
    }
    else if (0 > 0) // false
    {
        test(0 - 1);
        System.out.println(0);
    }
    // aufruf an test zu ende
    System.out.println(1);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
veryck Methoden Rekursive Methoden mit Rückgabeparameter Java Basics - Anfänger-Themen 9
R Methoden rekursive Methoden Java Basics - Anfänger-Themen 6
D Methoden Rekursive Methoden Java Basics - Anfänger-Themen 13
M Stürzen alle Rekursive Methoden irgendwann ab? Java Basics - Anfänger-Themen 11
B OOP Einfach verkettete Liste - rekursive Methoden Java Basics - Anfänger-Themen 1
K Rekursive Methoden Java Basics - Anfänger-Themen 15
S rekursive methoden Java Basics - Anfänger-Themen 5
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
O Quersumme rekursive Methode Java Basics - Anfänger-Themen 3
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
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
M 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
T Iterative Pi Berechnung in Rekursive Java Basics - Anfänger-Themen 2
C rekursive methode Java Basics - Anfänger-Themen 2
R rekursive Methode funktioniert nicht Java Basics - Anfänger-Themen 4
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
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
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
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 Funktion (Verständnissfrage) Java Basics - Anfänger-Themen 5
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
A HILFE! Rekursive Funktion Java Basics - Anfänger-Themen 20
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
K rekursive Funktion mit mehreren Parametern Java Basics - Anfänger-Themen 5
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
D rekursive ausgabe einer zahl Java Basics - Anfänger-Themen 14
S Rekursive Funktionen in imperative Funktionen umwandeln Java Basics - Anfänger-Themen 2
M Rekursive Binärsuche Java Basics - Anfänger-Themen 6
H Methoden in anderen Methoden aufrufen Java Basics - Anfänger-Themen 4
K Hilfe bei Methoden Übung Java Basics - Anfänger-Themen 6
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
C eigene Methoden erstellen (Instanzmethoden) Java Basics - Anfänger-Themen 7
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
H Methoden in großen Klassen gruppieren oder auslagern? Java Basics - Anfänger-Themen 10
G Generics Methoden Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Anzeige

Neue Themen


Oben