Ваш подход к рекурсии неверен. Вы не можете использовать абсолютное позиционирование в своей рекурсии:
square.goto(0,0)
...
pattern(length/4.4, depth -1, 1.5,1.5)
Все должно быть относительно того, где вы находитесь. Кроме того, для создания рекурсивного рисунка, подобного этой работе, ваша рекурсивная функция должна оставлять черепаху в том же состоянии (положении и направлении), в каком она была при входе в рекурсивную функцию, чтобы вызывающая сторона знала, где она стоит.
Для этого дизайна вы не можете просто нарисовать квадрат и затем выполнить рекурсию, вам нужно повторяться в каждом углу квадрата во время рисования.
В качестве более простого начального упражнения давайте просто нарисуем линии этой фигуры и проигнорируем заливку. Это может не привести непосредственно к решению, но продемонстрирует вышеуказанные принципы:
from turtle import Turtle, Screen
def pattern(length, depth):
if depth < 1:
return
# assume we're at the center of square, move to corner
turtle.penup()
turtle.backward(length / 2)
turtle.left(90)
turtle.backward(length / 2)
turtle.right(90)
turtle.pendown()
for _ in range(4):
pattern(length / 2.2, depth - 1) # recurse at each corner
turtle.forward(length)
turtle.left(90)
# return to center of square for the benefit of caller
turtle.penup()
turtle.forward(length / 2)
turtle.left(90)
turtle.forward(length / 2)
turtle.right(90)
turtle.pendown()
screen = Screen()
turtle = Turtle()
turtle.speed('fastest')
pattern(100, 4)
turtle.hideturtle()
screen.exitonclick()
OUTPUT
Теперь возникает проблема как заполнить эти квадраты, так и убедиться, что верхний правый квадрат в шаблоне всегда «заправлен».