lehrkraefte:snr:informatik:glf22:python:rekursion

This is an old revision of the document!


Rekursion: (Weihnachts-)Bäume und Schneeflocken

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()
 
# Um die Zeichung schneller erscheinen zu lassen, 
# gibt es den folgenden Trick:
# Ersetze die Zeile ''speed(0)'' durch ''tracer(0)'' 
# und ergänze in der Zeile vor ''exitonclick()'', 
# also nach allen Zeichenbefehlen, die Zeile ''update()''.

Experimentiere:

  • Für welche Verzweigungswinkel kommt eine besonders schöne Figur heraus?
  • Wer will, kann auch bereits hier eine Schleife über gewisse Verzweigungswinkel laufen lassen (auch wenn das eigentlich erst unten in der Animationsaufgabe vorgeschlagen wird…)
  • Nimm statt 3 Verzweigungen eine andere Zahl von Verzweigungen.
  • Zeichne jede der Verzweigungen unterschiedlich lang.

Eine Funktion heisst rekursiv, wenn sie sich selbst aufruft.

Rekursion meint in der Informatik (und ähnlich in der Mathematik) den Einsatz rekursiver Funktionen.

Etymologie: lateinisch recurrere, zurücklaufen, auf etwas zurückkommen

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:

Animiere die Objekte, die wir oben gezeichnet haben:

  • Zeichne nacheinander den Baum für verschiedene Verzweigungswinkel, etwa bei 30 Grad startend bis 120 Grad in Schritten von 1 Grad.
  • Lass die Kochsche Schneeflocke rotieren.

Verstehe dazu eines der unten angegebenen Animations-Beispielprogamme ein bisschen und verändere es, indem du an geeigneter Stelle die Funktion zum Baum-Zeichnen bzw. zum Schneeflocke-Zeichnen aufrufst.

Die wichtigen Befehle in diesen Programmen sind tracer(0) und update(). Sie sorgen dafür, dass alle Zeichnungen “im Hintergrund” entstehen und erst per Update sichtbar werden. So vermeidet man das Flackern des Bildschirms. Ausserdem wird deutlich schneller gezeichnet.

Animations-Beispielprogramm (einfache Variante)

Animations-Beispielprogramm (einfache Variante)

animierter-kreis.py
from turtle import *
from time import *
 
def abbruch(x=0, y=0):
    global aktiv
    aktiv = False
 
leinwand = Screen()
tracer(n=0)
hideturtle()
 
for radius in range(-200, 201):
    clear()
    circle(radius)
    update()
    sleep(0.01)

Animations-Beispielprogramm (kompliziertere Variante, Animation läuft bis zum Abbruch per Mausklick oder Tastendruck)

Animations-Beispielprogramm (kompliziertere Variante, Animation läuft bis zum Abbruch per Mausklick oder Tastendruck)

animierter-kreis-abbruch-per-click-oder-tastendruck.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

  • lehrkraefte/snr/informatik/glf22/python/rekursion.1671635842.txt.gz
  • Last modified: 2022/12/21 16:17
  • by Olaf Schnürer