我无法递归绘制正方形。我的问题是当我递归调用它时,应该将什么长度传递给我的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)
答案 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,我们得到:
但是将深度设置为1会让我们看到原始数字: