Генерация фрактала треугольника Коха: примеры кода на Python

Треугольник Коха относится к снежинке Коха, которая представляет собой математическую кривую и одну из первых фрактальных кривых, которые были описаны. Он образуется путем многократного добавления меньших равносторонних треугольников к сторонам большего равностороннего треугольника. Вот несколько способов создания треугольника Коха с примерами кода на Python:

Метод 1: использование рекурсии

import turtle
def draw_koch(length, depth):
    if depth == 0:
        turtle.forward(length)
    else:
        draw_koch(length/3, depth-1)
        turtle.left(60)
        draw_koch(length/3, depth-1)
        turtle.right(120)
        draw_koch(length/3, depth-1)
        turtle.left(60)
        draw_koch(length/3, depth-1)
def main():
    turtle.speed(0)
    depth = 4
    length = 300
    for _ in range(3):
        draw_koch(length, depth)
        turtle.right(120)
    turtle.done()
if __name__ == '__main__':
    main()

Метод 2. Использование итеративного подхода

import turtle
def draw_koch(length, depth):
    stack = []
    stack.append((length, depth))
    while stack:
        length, depth = stack.pop()
        if depth == 0:
            turtle.forward(length)
        else:
            stack.append((length/3, depth-1))
            turtle.left(60)
            stack.append((length/3, depth-1))
            turtle.right(120)
            stack.append((length/3, depth-1))
            turtle.left(60)
            stack.append((length/3, depth-1))
def main():
    turtle.speed(0)
    depth = 4
    length = 300
    for _ in range(3):
        draw_koch(length, depth)
        turtle.right(120)
    turtle.done()
if __name__ == '__main__':
    main()

Оба метода используют графическую библиотеку черепах для визуализации треугольника Коха. Первый метод использует рекурсию, при которой функция draw_kochвызывает саму себя для рисования меньших сегментов треугольника. Второй метод использует итеративный подход, используя стек для отслеживания сегментов, которые нужно нарисовать.