Rekursive Kreise ziehen

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
duodiscus
User
Beiträge: 97
Registriert: Sonntag 6. April 2014, 16:10

Hallo zusammen,
ich beschäftige mich zurzeit mit Turtle Graphic und Rekursion.
Ich habe vor konzentrische Kreise zeichnen zu lassen, die pro um lauf im Abstand von 4px größer werden. Insgesamt sollen 20 Umläufe gemacht werden.

Das "Rohprodukt" habe ich fertig:

Code: Alles auswählen

import turtle

def Kreise(r):
    turtle.goto(0,0)
    turtle.down()
    turtle.circle(r)

    turtle.up()
    turtle.right(90)
    turtle.forward(4)
    turtle.left(90)
    turtle.down()
    turtle.circle(r+4)

Kreise(50)

Ich kriege es aber nicht hin die Rekursion da einzubauen, das er sozusagen die Schritte unten mit dem vergrößern des Radius genau für 20 mal macht. Kann mir da jemand ein paar Tipps geben?
Danke schonmal!
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@duodiscus:
Mal wieder eine Hausaufgabe? :wink:

Die Aufgabe ist zwar nicht gerade prototypisch für Rekursionen, aber warum nicht. Da Du Dich ja gerade mit Rekursionen beschäftigst - zeig uns doch mal, was Du rekursiontechnisch bisher hast (nicht der Zeichnenteil, was innerhalb der Rekursion ausgeführt wird, ist bis auf die Abbruchbedingung und Selbstaufruf irrelevant).
BlackJack

@duodiscus: Der erste Tipp wäre das *nicht* rekursiv zu machen. Das ist eine ganz einfache, iterative Angelegenheit bei der es keinen vernünftigen Grund gibt das unnötig komplizierter zu machen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Und wenn man es halt doch machen muss, so muss man sich ja in der Tat nur Gedanken machen, *was* an Informationen in jeder Rekursionsstufe gebraucht wird. Da nach 20 Mal Schluss sein soll, könnte man stark vermuten, dass die aktuelle Tiefe wohl eine Rolle spielt und irgend wie verfügbar sein muss... ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

'Ne Musterlösung:

Code: Alles auswählen

import turtle


def step_aside_right(length):
    turtle.right(90)
    turtle.forward(length)
    turtle.left(90)


def draw_concentric_circles(count, radius=50, gap_width=4):
    if count > 0:
        turtle.down()
        turtle.circle(radius)
        turtle.up()
        step_aside_right(gap_width)
        draw_concentric_circles(count - 1, radius + gap_width)


def main():
    draw_concentric_circles(20)
    turtle.mainloop()
Antworten