在Python中递归绘制正方形

时间:2017-02-05 21:30:34

标签: python recursion turtle-graphics

我无法递归绘制正方形。我的问题是当我递归调用它时,应该将什么长度传递给我的draw_squares函数。我似乎无法让它在原始方块内正确匹配。查找附加输出的示例。 Output example

draw_squares(side_size, depth):
    turtle.forward(side_size)
    turtle.left(90)
    turtle.forward(side_size)
    turtle.left(90)
    turtle.forward(side_size)
    turtle.left(90)
    turtle.forward(side_size)
    turtle.left(90)
    if depth > 1:
        turtle.penup()
        turtle.left(90)
        turtle.forward(side_size * 1 / 2)
        turtle.right(90)
        turtle.pendown()
    else:
        pass

#Draw diagonal squares within original square

def draw_squares2(side_size, depth):
    if depth > 1 and depth % 2 == 0:
        turtle.right(45)
        draw_squares(side_size * 1/3, depth - 1)

2 个答案:

答案 0 :(得分:2)

首先,你不是在这里递归地绘制正方形 :draw_squares2只调用draw_squares,它从不调用自身或它的父亲。递归函数直接或间接调用自身。看起来你正在努力实现一个递归解决方案(将乌龟移到一边的中间),但你还没有。

除其他外,我注意到您链接到您的帖子的图片似乎与上面的代码不符。还是......

正如其他人所指出的,你所遇到的问题是基本的几何形状:在45度角的另一个正方形上刻有一个正方形的边长是多少?你需要的长度是 sqrt(2)/ 2 倍于父母方的长度。

跟踪您如何使用此值;你的程序容易乘以2除以2.将关键点的 print 语句用于跟踪你的计算。

答案 1 :(得分:1)

提出的问题不是递归的,但它可能是。我在下面使用 stamping 编写了一个示例方法,虽然不能直接翻译成 drawing 方法,但应该给出想法但不是解决方案:

from turtle import Turtle, Screen

colors = ["navy", "gold"]

STAMP_UNIT = 20

def draw_figure(turtle, side_size, depth):
    turtle.turtlesize(side_size / STAMP_UNIT)
    turtle.color(colors[depth % 2], "white")
    turtle.stamp()

    if depth < 1:
        return

    turtle.forward(side_size / 4)

    turtle.left(45)
    draw_figure(turtle, side_size / 2 / 2**0.5, depth - 1)
    turtle.right(45)

    turtle.backward(side_size / 2)

    turtle.left(45)
    draw_figure(turtle, side_size / 2 / 2**0.5, depth - 1)
    turtle.right(45)

    turtle.forward(side_size / 4)  # return to starting point

yertle = Turtle(shape="square", visible=False)
yertle.penup()

draw_figure(yertle, 240, 3)

screen = Screen()

screen.exitonclick()

在深度3,我们得到:

enter image description here

但是将深度设置为1会让我们看到原始数字:

enter image description here