7.3.3 Debugger

Stationen zum Trace-Modus beim RekursionDemo-Programm. (F7)
 
   

Abbildung 1: Die Main-Methode ist gestartet und wenn Zeile 3 ausgeführt wird, wird die Methode
rekursio(...) mit dem Wert 5 aufrufen; diese Information entnimmt man dem Aufrufstack. Auf dem Stack liegen die Anweisungen, die noch zu erledigen sind.
 

Abbildung 2:Die Methode ist aufgerufen. der Wert des lokalen a ist 5. Als nächstes wird a um 1 dekrementiert (Zeile 6). Danach, das ist im Bild nicht dargestellt, wird der Wert von a (jetzt 4) ausgegeben.
 

Abbildung 3: NAch der Ausgabe des aktuellen Wertes von a (4), wird geprüft, ob die Bedingung für einen erneuten Aufruf der Methode
rekursion(...), jetzt mit dem Wert 4 erfolgt.
 

Abbildung 4: Die Methode ist erneut aufgerufen. Als unerledigt auf dem Stack liegen jetzt die
main-Methode und zwei Kopien von rekursion(...). Wir sehen, die unerledigten Dinge werden immer auf den Stack gelegt. Das zu letzt auf den Stack gelegte ist in der ersten Zeie im Stackaufruf zu sehen. Der Wert von a wurde bereits inkrementiert und wir stehen erneut vor der Frage, die Methode noch einmal aufzurufen (Zeile 8)
 

Abbildung 5: Wir sind eine weitere Stufe in der Rekursion abgestiegen.
 

Abbildung 6: Wir sind eine weitere Stufe in der Rekursion abgestiegen.
 

Abbildung 7: Es liegen bereits 5 Kopien der Methode
rekursion(...) auf dem Stack. Der Wert von a ist mittlerweile bei 0 angekommen. Die rekursive Abstieg ist an seinem tiefsten Punkt angekommen. Die Methode rekursion(...) wird nicht mehr aufgerufen. Jetzt können die unerledigten Dinge abgearbeitet werden.
 

Abbildung 8: Als erstes wird die zuletzt angelegte Kopie der Methode rekursion(...), die also mit dem Wert a = 0 abgeschlossen. Es wird dabei der aktuelle Wert, also 0 ausgegeben (Zeile 9).
 

Abbildung 9: Schritt für Schritt...
 

Abbildung 10: ... wird eine unerledigte Kopie vom Stack heruntergeholt,..
 

Abbildung 10: ... und der jeweils aktuelle Wert von a ausgegeben. Das Abarbeiten der unerledigten Methoden geschieht natürlich in umgekehrter Reihenfolge, wie die Methoden auf den Stack gelegt wurden.  Im Gegensatz zum rekursiven Abstieg sprechen wir jetzt vom rekursiven Aufstieg.
 

Abbildung 11: Insgesamt haben wir die Zahlen 4,3,2,1,0,0,1,2,3,4 ausgegeben. Wir merken uns. Anweisungen, die im Quelltext vor dem rekursiven Aufruf stehen, werden in der erwarteten Reihenfolge abgearbeitet, Anweisungen, die im Quelltext nach dem rekursiven Aufruf stehen, werden in 'umgekehrter' Reihenfolge abgearbeitet.
 

Abbildung 12: Alle rekursiv aufgerufenen Methoden sind schließlich abgearbeitet. Es bleibt nur noch die main-Methode zu Ende zu führen.
 
zurück zu 7.4 Rekursive Methoden für die Klasse Mathematik
7.4.1 Der rekursive ggT-Algorithmus

 
zur Startseite www.pohlig.de  (C) MPohlig 2007