Как создать кривую Серпинского, используя только символы "*" и слэши ("/"), без использования графических библиотек?

Как можно реализовать программу для рисования кривых Серпинского с помощью рекурсии, используя символы '*' или различные слеши, без использования графических библиотек и контейнеров? Я уже придумал использовать двумерный динамический массив в качестве поля и работать с координатами, но не знаю, как объединить все вместе и сделать реализацию. Я буду очень признателен, если кто-то поможет с этим!=')
Изображение к вопросу
  • 27 сентября 2023 г. 13:28
Ответы на вопрос 2
Для создания кривой Серпинского используя только символы "*" и "/", можно использовать следующий алгоритм:

1. Создайте функцию, которая будет рекурсивно вызывать себя и рисовать кривую. Передайте в эту функцию параметры, определяющие текущий уровень рекурсии, начальные координаты и размер кривой.

2. На каждом уровне рекурсии, разделите текущий квадрат на 9 равных квадратов. Оставьте центральный квадрат пустым.

3. Если текущий уровень рекурсии равен 0, то закрасьте все квадраты внутри кривой символами "*". Если текущий уровень рекурсии больше 0, то перейдите к следующему шагу.

4. Рекурсивно вызовите функцию для каждого из 8 квадратов, не включая центральный квадрат. Передайте в каждый вызов функции новые значения координат и размера квадрата, уменьшив его в два раза.

5. В каждом вызове функции используйте символ "/", чтобы нарисовать обратную диагональную линию от левого верхнего угла до правого нижнего угла квадрата.

6. Вернитесь в основную программу и вызовите функцию с начальными параметрами.

Вот пример кода на языке Python, который реализует это:

```python
def draw_sierpinski(level, x, y, size):
    if level == 0:
        for i in range(size):
            for j in range(size):
                print("*", end="")
            print()
    else:
        draw_sierpinski(level - 1, x, y, size // 3)
        draw_sierpinski(level - 1, x + 2 * size // 3, y, size // 3)
        draw_sierpinski(level - 1, x, y + 2 * size // 3, size // 3)
        draw_sierpinski(level - 1, x + 2 * size // 3, y + 2 * size // 3, size // 3)
        draw_sierpinski(level - 1, x + size // 3, y + size // 3, size // 3)

        for i in range(size // 3):
            for j in range(size // 3):
                if i == j:
                    print("/", end="")
                else:
                    print("*", end="")
            print()

level = int(input("Введите уровень рекурсии: "))
size = 3**level

draw_sierpinski(level, 0, 0, size)
```

Эта программа спрашивает у пользователя уровень рекурсии, а затем рисует кривую Серпинского на основе указанного уровня.

Надеюсь, это поможет!
Совет 1: Рисование картинки можно сделать проще, если использовать матрицу (растр) и заменить ее элементы на псевдографику, используя специальные символы. Вот ссылка на таблицу символов, которую можно использовать: https://en.wikipedia.org/wiki/Box-drawing_character. Однако, следует помнить, что такое решение может выглядеть грубо и размыто.

Совет 2: Если требуется рисовать картинку без использования контейнеров, можно использовать рекурсивную функцию. Она будет принимать порядок кривой и местоположение для рисования (квадрат и его поворот). Функция будет рекурсивно вызывать саму себя, чтобы отрисовать 4 кусочка для каждого из 4 квадратов и 3 соединительных кусочка. Однако, здесь все равно потребуется использование массива для вывода.

Совет 3: Альтернативный вариант - реализовать функцию, которая определит, какой символ должен находиться на определенной позиции кривой. Функция будет проверять, находится ли искомый символ между четырьмя квадратами и определит, является ли символ пустым или одним из трех соединительных кусочков. Если символ находится внутри квадрата, функция рекурсивно вызовет саму себя для этого квадрата и может повернуть ответ по нужному углу. Результат работы функции будет выводиться в цикле для всех координат. Этот вариант работает немного медленнее, но не требует выделения памяти под всю матрицу вывода.
Похожие вопросы