Lass gedanklich erstmal die Zeilen 5 bis 8 raus, d. h. lass die Rekursion weg. Dann passiert ja offensichtlich folgendes:
Wenn l < 16 ist, ist das Thema erledigt. Ansonsten wird geprüft, ob c true ist. Ist dies der Fall, wird der Stift auf orange gesetzt, sonst auf blau. Naja und dann werden zwei Rechtecke mit dem Mittelpunkt (x,y) gezeichnet: einmal vertikal (Zeile 18) und einmal horizontal (Zeile 19). Die Höhe bzw. Breite ist dabei l/2, die Breite bzw. Höhe 5 % davon.
Das kann man mal durchspielen für den Aufruf aus der Aufgabenstellung: x und y sind 0. Die Länge ist 512 und das c steht auf true. Also werden zwei orangene Rechtecke der Länge 256 über Kreuz mit Mittelpunkt (0,0) gezeichnet.
Jetzt bauen wir mal Zeile 5 ein. Dann wird - noch bevor die Stiffarbe einegestellt wird und die 256er-Rechtecke gezeichnet werden - die Methode erneut aufgerufen. Aber natürlich mit anderen Parametern: Der Mittelpunkt wird horizontal nach rechts und vertikal nach unten um 1/4 der angegebenen Länge verschoben. Dort sollen Rechtecke mit der halben bisherigen Länge gezeichnet werden. Der Farbparameter wird negiert, so dass sich bei jedem wiederkehrenden Aufruf die Farbe ändert.
Das kann man wieder durchspielen:
Ebene 1: Parameter: 0, 0, 512, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 2: Parameter: 128, 128, 256, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 3: Parameter: 160, 160, 128, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 4: Parameter: 168, 168, 64, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 5: Parameter: 184, 184, 32, true
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 6: Parameter: 192, 192, 16, false
Test in Zeile 2 liefert true, also wird mit Zeile 5 fortgefahren. Dort erfolgt nun ein neuer Aufruf:
Ebene 7: Parameter: 200, 200, 8, true
Test in Zeile 2 liefert false, damit ist der Methodenaufruf aus Ebene 6 beendet.
Ebene 6: Code wird ab Zeile 10 weiter ausgeführt (die anderen Zeilen haben wir ja ausgeblendet)
Die Parameter auf Ebene 6 waren: 192, 192, 16, false. Also werden jetzt blaue Rechtecke mit Mittelpunkt 192,192 der Länge 8 gezeichnet. Damit ist der Methodenaufruf aus Ebene 5 beendet.
Ebene 5: Code wird ab Zeile 10 weiter ausgeführt (die anderen Zeilen haben wir ja ausgeblendet)
Die Parameter auf Ebene 5 waren: 184, 184, 32, true Also werden jetzt orange Rechtecke mit Mittelpunkt 184,184 der Länge 16 gezeichnet. Damit ist der Methodenaufruf aus Ebene 4 beendet.
usw.
EDIT: Wenn Du jetzt Zeile 6 einbaust, funktioniert das nach dem gleichen Prinzip, d. h. nach einer Rückkehr des Methodenaufrufs aus Zeile 5 erfolgt sofort der nächste Aufruf in Zeile 6 und erst, wenn dieser zurückkehrt, geht es auf der gleichen Ebene mit der nächsten Zeile weiter.