Seite 1 von 1

Rekursive Kreise ziehen

Verfasst: Freitag 30. Mai 2014, 09:40
von duodiscus
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!

Re: Rekursive Kreise ziehen

Verfasst: Freitag 30. Mai 2014, 09:52
von jerch
@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).

Re: Rekursive Kreise ziehen

Verfasst: Freitag 30. Mai 2014, 09:59
von 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.

Re: Rekursive Kreise ziehen

Verfasst: Freitag 30. Mai 2014, 10:14
von Hyperion
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... ;-)

Re: Rekursive Kreise ziehen

Verfasst: Freitag 6. Juni 2014, 00:05
von 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()