177
6.9
Experimente zur Rekursion mit der Turtle-Grafik
Tabelle 6.2 zeigt die wichtigsten Turtle-Kommandos. Beachten Sie, dass es zu vielen Funk-
tionen auch eine Kurzform gibt.
Vielleicht ist Ihnen bei diesen ersten Experimenten schon aufgefallen, dass die Turtle sich
relativ langsam bewegt. Man kann die Bewegung mit dem Auge verfolgen. Das ist Absicht.
Denn auf diese Weise kann man die Ausführung rekursiver Funktionen nachvollziehen.
6.9.2 Eine rekursive Spirale
Das folgende Skript zeigt ein Beispiel für eine rekursive Funktion. Probieren Sie sie aus.
Das Skript enthält eine rekursive Funktion namens
spirale(). Im Grafik-Fenster entsteht
ein Bild wie in Abbildung 6.7. Die Turtle zeichnet eine rechteckige Spirale. Sie beginnt
außen und bewegt sich mit immer kleineren Geradeausfahrten nach innen. Aber es gibt ein
Problem! Die Turtle dreht sich in der Mitte des Fensters immer weiter. Sie hält niemals an.
Befehl Bedeutung
backward (n), bk(n),
back(n)
Gehe n Schritte zurück.
circle(r)
Zeichne einen Kreis mit Radius r.
clear()
Lösche die Zeichenfläche, gehe in die Mitte.
forward(n), fd(n) Gehe n Schritte geradeaus.
left(n), lt(n) Drehe dich um n Grad nach links.
hideturtle(), ht() Turtle wird unsichtbar.
pendown(), pd(), down() Stift nach unten!
penup(), pu(), up() Stift nach oben!
right(n), rt(n) Drehe dich um n Grad nach rechts.
showturtle(), st() Turtle wird sichtbar.
speed(n)
Einstellung der Geschwindigkeit; n ist eine ganze Zahl zwi-
schen 0 und 10.
Tabelle 6.2: Einige Funktionen der Turtle-Grafik und ihre Kurzformen
# spirale_0.py
from turtle import *
def spirale(x):
forward(x)
right(90)
spirale(0.9*x) # rekursiver Aufruf
return
spirale(200)
Kapitel 6
Funktionen
178
Schließen Sie das Fenster Python Turtle Graphics und brechen Sie damit das Programm ab,
ehe das Laufzeitsystem Probleme bekommt.
Abb. 6.7: Eine Spirale mit der Turtle-Grafik
Werfen wir einen Blick auf den Programmtext. Das Skript enthält die rekursive Funktion
spirale(). In der letzten Zeile wird diese Funktion mit dem Argument 200 aufgerufen.
Die Turtle geht also 200 Schritte geradeaus, dann dreht sie sich nach rechts und dann wird
wieder (rekursiv) die Funktion
spirale() aufgerufen, diesmal aber mit dem Argument 180
(0.9*200)
. Bei diesem zweiten Aufruf geht die Turtle nur 180 Schritte und dreht dann wie-
der um 90 ° nach rechts usw. Den ganzen Prozess kann man sich als unendliche Folge von
Aufträgen vorstellen.
Abb. 6.8: Ausführung einer rekursiven Funktion als Folge von Aufträgen
Aber niemals wird ein Auftrag beendet. Und genau das ist das Problem. Eine rekursive
Funktion muss eine bedingte Anweisung enthalten, die den Abbruch der Rekursion ermög-
licht. Ansonsten haben wir eine Endlosrekursion. Die folgende rekursive Funktion bricht
die Ausführung mit
return ab, wenn der Parameter x kleiner als 5 ist.

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.