Вопрос или проблема
рекурсивная функция, которая принимает нечетное число n в качестве ввода и выводит матрицу [n]x[n], которая имеет заданный шаблон.
Ответ или решение
Для решения задачи создания рекурсивной функции, которая принимает нечетное число ( n ) в качестве входного параметра и возвращает матрицу размером ( n \times n ) с заданным паттерном, мы будем использовать язык программирования Python. Готовое решение можно представить в виде следующего кода:
def create_matrix(n):
# Создаем пустую матрицу n x n
matrix = [[0] * n for _ in range(n)]
def fill_pattern(x, y, size, current_value):
if size == 0:
return
# Заполняем верхнюю строку
for i in range(y, y + size):
matrix[x][i] = current_value
# Заполняем правый столбец
for i in range(x + 1, x + size):
matrix[i][y + size - 1] = current_value
# Заполняем нижнюю строку, если есть место
if size > 1:
for i in range(y + size - 1, y - 1, -1):
matrix[x + size - 1][i] = current_value
# Заполняем левый столбец, если есть место
if size > 1:
for i in range(x + size - 2, x, -1):
matrix[i][y] = current_value
# Рекурсивный вызов для внутренней части матрицы
fill_pattern(x + 1, y + 1, size - 2, current_value + 1)
fill_pattern(0, 0, n, 1)
return matrix
# Пример использования функции
n = 5 # Пример нечетного числа
result_matrix = create_matrix(n)
# Вывод полученной матрицы
for row in result_matrix:
print(row)
Объяснение решения:
-
Создание матрицы: Мы создаем пустую матрицу размером ( n \times n ) с использованием списковых включений, где каждое значение инициализируется нулём.
-
Рекурсивная функция
fill_pattern
: Внутренняя рекурсивная функция заполнения обрабатывает текущую подматрицу, которая начинается с координат(x, y)
и имеет размерsize
. Эта функция выполняет следующие шаги:- Заполняет верхнюю строку текущей подматрицы.
- Заполняет правый столбец.
- Если размер больше 1, заполняет нижнюю строку и левый столбец.
- Затем рекурсивно вызывает себя для меньшей подматрицы с новыми координатами.
-
Тестирование функции: Мы вызываем функцию
create_matrix
с примером нечетного числа ( n ) и выводим результат на экран.
Таким образом, окончательная реализация функции успешно создает матрицу заданного размера с необходимым паттерном. Это достаточно универсальное решение, которое позволяет легко изменять размер матрицы и проверять его корректность.