This is an old revision of the document!
Rekursion: (Weihnachts-)Bäume und Schneeflocken
Einführung am Beispiel
Gemeinsames angeleitetes Programmieren: Baumwachstum simulieren, von Jahr zu Jahr.
Programm-Gerüst:
- baum.py
from turtle import * STAMMLAENGE = 380 speed(0) # hideturtle() penup() left(90) backward(STAMMLAENGE) pendown() exitonclick()
Experimentiere: Für welche Verzweigungswinkel kommt eine besonders schöne Figur heraus?
Eine Funktion heisst rekursiv, wenn sie sich selbst aufruft.
Rekursion meint in der Informatik (und ähnlich in der Mathematik) den Einsatz rekursiver Funktionen.
Aufgabe zur Rekursion: Koch-Kurve und kochsche Schneeflocke
Schreibe eine rekursive Funktion, die je nach “Level” die folgenden Bilder zeichnet (wenn man diese Kurve “unendlich genau” zeichnet, bekommt man die sogenannte Koch-Kurve):
Programm-Gerüst:
- koch-kurve.py
from turtle import * LEVEL = 3 SEITENLAENGE = 400 def linienzug(level, a): print('Hier ist die rekursive Funktion "linienzug" zu definieren!') def schneeflocke(level, a): print('Hier ist die Funktion "schneeflocke" zu definieren!') speed(0) # hideturtle() penup() backward(SEITENLAENGE/2) pendown() linienzug(LEVEL, SEITENLAENGE) # left(60) # schneeflocke(LEVEL, SEITENLAENGE) exitonclick()
Mit dieser Vorarbeit ist es nun einfach, eine Funktion zu definieren, die die sogenannte Kochsche Schneeflocke zeichnet:
Aufgabe: Animation der obigen Objekte - "Filmchen drehen"
Animiere die Objekte, die wir oben gezeichnet haben:
- Zeichne nacheinander den Baum für verschiedene Verzweigungswinkel, etwa bei 30 Grad startend bis 120 Grad und dann wieder retour, jeweils in Schritten von 1 Grad.
- Lass die Kochsche Schneeflocke rotieren.
Verstehe dazu das unten angegebene Animations-Beispielprogamm (wachsender und schrumpfender Kreis) ein bisschen und verändere es, indem du an geeigneten Stellen die Funktion zum Baum-Zeichnen bzw. zum Schneeflocke-Zeichnen aufrufst (die while
-Schleife wird verlassen, sobald der Benutzer eine Taste drückt oder mit der Maus in das Zeichenfenster klickt).
- kreis-animiert.py
from turtle import * from time import * def abbruch(x=0, y=0): global aktiv aktiv = False leinwand = Screen() tracer(n=0) hideturtle() leinwand.onkeypress(abbruch) leinwand.onclick(abbruch) listen() aktiv = True radius = 20 veraenderung = 1 while aktiv: clear() circle(radius) update() if radius < -200 or radius > 200: veraenderung = -veraenderung radius = radius + veraenderung sleep(0.01)
Vielleicht ganz nett, falls jemand Spass am Python-Programmieren bekommen hat: 190 Python projects