Lernpfad:Rekursion in Java/Aufrufstapel: Unterschied zwischen den Versionen
Thi (Diskussion | Beiträge) |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
== Der Aufrufstapel == | == Der Aufrufstapel == | ||
Intern werden die Methodenaufrufe einer rekursiven Methode auf einem ''Stapel'' gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen. | Intern werden die Methodenaufrufe einer rekursiven Methode auf einem ''Stapel'' (''Stack'') gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen. | ||
Der Quelltext für die Methode | Der Quelltext für die Methode <code>fakultaet</code> erzeugt den darunter dargestellten Aufrufstapel. | ||
<syntaxhighlight lang="java" line="1" > | <syntaxhighlight lang="java" line="1"> | ||
public int | public int fakultaet(int n) { | ||
if(n < 2) { | |||
return 1; | |||
} else { | |||
return n*fakultaet(n-1); | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Datei:01_Rekursion_Aufrufstack_Fakultaet.png |600px|center|Aufrufstapel der Methode | [[Datei:01_Rekursion_Aufrufstack_Fakultaet.png|600px|center|Aufrufstapel der Methode <code>fakultaet</code>.]] | ||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
{| | {| {{prettytable}} | ||
! Die Methode z | ! Die Methode z | ||
! Ergänze den Aufrufstapel für z(5) . | ! Ergänze den Aufrufstapel für z(5) . | ||
Zeile 23: | Zeile 23: | ||
| <syntaxhighlight lang="java" line="1" > | | <syntaxhighlight lang="java" line="1" > | ||
public int z(x) { | public int z(x) { | ||
if(x > 1) { | |||
return x + z(x - 2); | |||
} else { | |||
return 1; | |||
} | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| | | | ||
{|class="wikitable" | {| class="wikitable" | ||
| | | | ||
| | | | ||
|z(1) | |z(1) | ||
| | | | ||
| | | | ||
|- | |- | ||
Zeile 45: | Zeile 45: | ||
|- | |- | ||
| z(5) | | z(5) | ||
| | | | ||
| | | | ||
| z(5) | | z(5) | ||
| 5+4=9 | | 5+4=9 |
Aktuelle Version vom 13. November 2021, 16:51 Uhr
Der Aufrufstapel
Intern werden die Methodenaufrufe einer rekursiven Methode auf einem Stapel (Stack) gespeichert. Die Methoden, die ganz oben auf dem Stapel liegen, werden zuerst abgearbeitet. Danach wird das Resultat der Methode verwendet, um die darunterliegenden Methoden zu berechnen.
Der Quelltext für die Methode fakultaet
erzeugt den darunter dargestellten Aufrufstapel.
public int fakultaet(int n) {
if(n < 2) {
return 1;
} else {
return n*fakultaet(n-1);
}
}
Die Methode z | Ergänze den Aufrufstapel für z(5) . | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
public int z(x) {
if(x > 1) {
return x + z(x - 2);
} else {
return 1;
}
}
|
|
Lösung
z(1) | 1 | |||
z(3) | z(3) | 3+1=4 | ||
z(5) | z(5) | z(5) | z(5) | 5+4=9 |