Не самая быстрая реализация, но она компактна и заставляет вас гадать, куда она пойдет дальше:
from turtle import Screen, Turtle
def fractal(turtle, length, minimum):
if length < minimum:
return
angle = 90
length //= 2
for _ in range(2):
for _ in range(2):
turtle.forward(length)
turtle.left(angle)
turtle.forward(length)
turtle.left(angle)
fractal(turtle, length, minimum)
turtle.left(angle)
turtle.forward(length)
turtle.right(angle)
turtle.forward(length)
angle = -angle
screen = Screen()
yertle = Turtle()
yertle.speed('fastest') # because I have no patience
fractal(yertle, 100, 10)
screen.exitonclick()
Сначала мы проведем наш путь к верхней правой ноге Н, повернем внутрь и вернемся.Как только мы закончим рекурсию, мы продолжаем поворачиваться в том же направлении, чтобы двигаться вниз по руке.Вместо того, чтобы двигаться полностью вниз по руке (эффективная вещь), мы возвращаемся к нашей исходной точке, но теперь мы сталкиваемся с противоположным путем, поэтому мы просто повторяем все, что мы делали до сих пор, чтобы нарисовать нижний левый угол H..
Как только это закончится, мы снова находимся в центре, снова указывая в первоначальном направлении, поэтому мы повторяем весь процесс снова, но превращаем все наши права в левые, и наоборот, отрицая угол.Это рисует нашу нижнюю левую ногу, а затем заканчивается верхней правой ногой.