Rekursion: Erklärung Koch Kurve

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
netbus
User
Beiträge: 2
Registriert: Dienstag 1. September 2015, 21:34

Hallo,
ich bin ein absoluter Python Neuling und gehe gerade das Buch "Think Pyhton" durch.
Dort wird das Beispiel gebracht, die Koch Kurve.
Ich habe ein Problem mit dem Verständnis der Rekursion.

Code: Alles auswählen

def koch(t, n):
    """Zeichnet eine Koch-Kurve mit Länge n."""
    if n<3:
        fd(t, n)
        return
    m = n/3.0
    koch(t, m)
    lt(t, 60)
    koch(t, m)
    rt(t, 120)
    koch(t, m)
    lt(t, 60)
    koch(t, m)
Verwende ich als länge (n) den Wert 5 wird er nach dem ersten if durch 5 dividiert, koch wird mit dem Ergebnis neu aufgerufen und ist nun kleiner als 3. Trotzdem läuft die Funktion weiter.
Wie kann das sein? Und meine zweite Frage ist, wenn (n<3) die Funktion nicht stoppt, was bring diese Funktion dann zum Stoppen?
BlackJack

@netbus: Welchen Funktionsaufruf meinst Du denn? Der erste läuft natürlich bis zum Ende durch und ruft `koch()` vier mal auf. Diese vier Aufrufe kommen nur bis zum ``if``-Zweig, aber der erste Aufruf ist erst zuende wenn der Programmfluss am Ende der Funktion angekommen ist. Ein ``return`` beendet nur den aktuellen Funktionsaufruf, nicht aber den Aufrufer. Zu dem wird zurückgekehrt und zwar an den Punkt im Programmablauf direkt nach dem Aufruf.
Benutzeravatar
Kebap
User
Beiträge: 686
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Rekursion bedeutet, dass die Funktion sich selbst nochmal aufruft.

Die zweite aufgerufene Funktion läuft in n<3 wie du richtig anmerkst.

Sie wird dann beendet und die zuerst aufgerufene Funktion läuft weiter.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
netbus
User
Beiträge: 2
Registriert: Dienstag 1. September 2015, 21:34

Danke BlackJack.
Ich glaube ich habe es jetzt verstanden.
Antworten