Python Library Turtle Rekursion?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Beispiel... [Zunächst ohne großartige Erklärung oder Kommentare]

from turtle import *

def drawSquare(a):
    pendown()
    for k in range(4):
        forward(a)
        left(90)
    penup()
    forward(a)

a = 100
d = 10
left(90)
for k in range(10):
    drawSquare(a)
    right(45)
    a -= d

Einfach immer ein Quadrat zeichnen. Dann jeweils zum nächsten Ende des Quadrats laufen, sich um 45° nach rechts drehen und das nächste Quadrat zeichnen.

Bei dem Beispiel habe ich mit a = 100 für die Seitenlänge des Quadrats begonnen, und dann in jedem Schritt die Seitenlänge um 10 verringert.


Christoph12423 
Fragesteller
 23.09.2020, 21:35

Vielen, vielen Dank für die schnelle und tolle Antwort. Habe den Code gleich ausprobiert, funktioniert super. Verstehen tu ich es jetzt auch. Danke. :-)))

0
KarlRanseierIII  23.09.2020, 21:37

Dein Code ist allerdings iterativ anstatt rekursiv.

1
mihisu  23.09.2020, 21:54
@KarlRanseierIII

Da hast du natürlich recht.

Anstatt das iterativ mit einer Schleife abzuarbeiten, kann man am Ende der drawSquare-Funktion wieder die drawSquare-Funktion für den nächsten Schritt aufrufen, um so eine Rekursion zu erzeugen.

Beispiel:

from turtle import *

def drawNextSquare(a, d):
    pendown()
    for k in range(4):
        forward(a)
        left(90)
    penup()
    forward(a)
    right(45)
    if a > d:
        drawNextSquare(a - 10, d)

a = 100
d = 10
left(90)
drawNextSquare(a, d)
1
KarlRanseierIII  23.09.2020, 22:25
@mihisu

Ja, so geht das natürlich auch - ich hätte einen anderen Ansatz gewählt, auch wenn das bei der Turtle nicht so recht den Unterschied macht, weil sie einen globalen State hat.

def sprial(base=100, scale=0.8, steps=10):
    if steps==0:
       return
    pendown()
    forward(base)
    penup()
    state=(pos(),heading())
    right(45)
    spiral(base*scale, scale, steps-1)
    goto(state[0])
    seth(state[1])
    pendown()
    for k in range(3):
       forward(base)
       left(90)
    penup()
    return

So in etwa würde ich das aufbauen (Hab den Code nciht getestet, weil keine Platform zur Hand).

1
Christoph12423 
Fragesteller
 24.09.2020, 20:49
Könnten Sie sich bitte auch meine andere Frage zur Rekursion anschauen („Python Library Turtle Rekursion Baum?“). Bräuchte da auch einen Code. Danke
0

Und an welchem Punkt hängst Du?

Tipp, die Basislinie zeichnest Du, dann steigst Du rekursiv ab, um nach Ende der Rekursion die Zeichnung jeweils zu vervollständigen.

Eigentlich ist der Sinn der Übung ja die Rekursion zu erkennen.


Christoph12423 
Fragesteller
 23.09.2020, 21:26

Ich weiß nicht, wie ich das alles angehen soll. Es wäre gut, wenn ich den richtigen Code zum Vergleichen hätte. Wie gesagt habe ich nicht mehr viel Zeit. Lg

0
KarlRanseierIII  23.09.2020, 21:33
@Christoph12423

Wie Du es angehst, habe ich Dir gesagt, der Rekursion erfolgt nach dem ersten Zeichenschritt (Erste Seite des Quadrates). D.h. die Basislinie entsteht als erstes.

Und wenn DU nicht mehr viel Zeit hast, dann mußt Du Dich eben etwas sputen, aber der Tag hat noch über 2h.

0