2016-12-23 10 views
1

Iは、次のコードを有する:再帰の制御深さ

from turtle import * 
speed(0) 

def polygon(xangle, steps): 
    n = 360 // xangle # number of sides required for chosen exterior angle 
    for i in range(n): 
     forward(steps) 
     right(xangle) 

def corner_polygons(xangle, steps): 
    n = 360 // xangle 
    for i in range(n): 
     draw_polygon(xangle, steps//5) # draw smaller polygon 
     forward(steps) 
     right(xangle) 

def double_corner_polygons(xangle, steps): 
    n = 360 // xangle 
    for i in range(n): 
     corner_polygons(xangle, steps//5) 
     forward(steps) 
     right(xangle) 

最初の関数は、指定された外角(xangle)とstepsに等しい辺の長さを有するポリゴンを描画します。 2番目の関数は以前と同じポリゴンを描画しますが、各コーナーに小さなポリゴンを配置します。第三の機能は、たとえば、1つのレベル深く行く:

double_corner_polygons(60, 150)

ができます:

enter image description here

を私がするように私は、描画がどのようになるの深い制御し、他のパラメータ、recursionsを追加します毎回新しい機能を書く必要はありません。私はそれがかなり正しいように見えることはできません。

def corner_polygons_recursive(xangle, steps, recs): 
    n = 360 // xangle 
    for i in range(n): 
     for j in range(1, recs+1): 
      corner_polygons(xangle, steps//5*j) 
     forward(steps) 
     right(xangle) 

答えて

2

のようなものかもしれない、あなたはそれを作るしようとしているよりも簡単かもしれ:

import turtle 

def corner_polygons_recursive(angle, side, depth): 

    if depth < 1: 
     return 

    n = 360 // angle 

    for _ in range(n): 
     corner_polygons_recursive(angle, side/3, depth - 1) 
     turtle.forward(side) 
     turtle.right(angle) 

corner_polygons_recursive(60, 150, 4) 

turtle.exitonclick() 

OUTPUT

enter image description here

これまでの私の試み
関連する問題