Python Library Turtle Rekursion?
Hallo. Ich muss für Informatik in Library Turtle (Python) eine Quadratspirale mit Hilfe der Rekursion zeichnen (siehe Bild). Könnte jemand einen Vorschlag für einen Code hier reinposten? Ich muss die Aufgabe sehr sehr bald abgeben, bin total im Stress und habe nicht die Zeit, meine ganzen Gedankengänge hier reinzuschreiben.
Ihr würdet mir SEHR viel helfen. :-) Die Aufgabe ist auch sicher sehr einfach für Erfahrene, deswegen ist der Code wahrscheinlich eher kurz. Danke.
2 Antworten
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.
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)
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).
Vielen, vielen Dank für die schnelle und tolle Antwort. Habe den Code gleich ausprobiert, funktioniert super. Verstehen tu ich es jetzt auch. Danke. :-)))
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.
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
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.
Dein Code ist allerdings iterativ anstatt rekursiv.