Java Reference
In-Depth Information
Nun wird der Stapel von oben nach unten abgearbeitet.
PrAXISTIPP: Auch die konkrete Abarbeitung der gestapelten Funktionsaufrufe
kann man sich hervorragend mit dem Debugger verdeutlichen.
Bild 5.21■ fak(0) bis fak(3) wurden ausgeführt und vom Stapel entfernt.
Zuerst wird fak(0) aufgerufen und vom Stapel genommen. Diese Funktion liefert den
Rückgabewert 1 , was im Moment uninteressant ist. Aber beim nächsten Aufruf ( fak(1) )
gelangen wir in den else -Zweig. Und dort wird der Wert von n ( 1 ) mit dem Rückgabewert
von fak(0) ( 1 ) multipliziert. Das Ergebnis ( 1 ) ist der Rückgabewert von fak(1) .
Nun liegt fak(2) oben im Stapel. Und dort wird der Wert von n ( 2 ) mit dem Rückgabewert
von fak(1) ( 1 ) multipliziert. Das Ergebnis ( 2 ) ist der Rückgabewert von fak(2) . Jetzt ist
fak(3) oben im Stapel und hier wird der Wert von n ( 3 ) mit dem Rückgabewert von fak(2)
( 2 ) multipliziert. Das Ergebnis ( 6 ) ist der Rückgabewert von fak(3) . So geht es weiter. Bei
fak(4) wird der Wert von n ( 4 ) mit dem Rückgabewert von fak(3) ( 6 ) multipliziert. Das
Ergebnis ( 24 ) ist der Rückgabewert von fak(4) . Der letzte Funktionsaufruf auf dem Stapel
nimmt den Wert 5 für n und multipliziert ihn mit 24 . Und diese Rückgabe von 120 ist letzt-
endlich das, was der Aufrufer von fak(5) bekommt und verarbeiten kann. Der Stack ist jetzt
auch wieder leer.
HInWEIS: Etwas weiter oben wurde schon darauf hingewiesen, dass Schleifen
und rekursive Aufrufe ot Alternativen für die gleichen Aufgaben darstellen.
Rekursive Aufrufe sind aber in der Regel nicht gut für die Performance eines
Skripts. Meist ist es besser, wenn Sie stattdessen eine Schleife verwenden.
Allerdings ist dieses Argument hinfällig, wenn Sie zeitverzögerte rekursive Auf-
rufe einsetzen, wie es bei Animationen der Fall sein wird.
 
Search WWH ::




Custom Search