Рекурсивная функция для вывода на экран следующей картинки - C#
Формулировка задачи:
Добрый день, помогите с задачей. Заранее всем спасибо!
Дано натуральное число n . Разработать рекурсивную функцию для вывода на экран следующей картинки:
1 (1 РАЗ)
222 (3 РАЗА)
33333 (5 раз)
... (n раз)
33333 (5 раз)
222 (3 РАЗА)
1 (1 РАЗ)
Листинг программы
- using System;
- namespace dd
- {
- class Program
- {
- static ulong fun(int max_n, int n = 1, int digit = 1)
- {
- if (n > max_n) return;
- for (int i = 0; i < (max_n - n + 1) / 2; ++i) Console.WriteLine(' ');
- for (int i = 0; i < n; ++i) Console.WriteLine("{2}", digit);
- if (n + 2 > max_n) return;
- fun(max_n, n + 2, digit + 1);
- for (int i = 0; i < (max_n - n + 1) / 2; ++i) Console.WriteLine(' ');
- for (int i = 0; i < n; ++i) Console.WriteLine("{2}", digit);
- }
- static void Main()
- {
- Console.WriteLine("Введите (N):");
- long N = Convert.ToInt64(Console.ReadLine());
- Console.WriteLine("Рекурсивный вызов:" , n, fun(n));
- }
- }
- }
Решение задачи: «Рекурсивная функция для вывода на экран следующей картинки»
textual
Листинг программы
- using System;
- namespace RecursiveAlgorithms
- {
- public class NumericPicture
- {
- public static void Main(string[] args)
- {
- // вводим с консоли число N
- Console.Write("Введите число N: ");
- int N = int.Parse(Console.ReadLine());
- // запускаем рекурсивный метод DrawPicture, указывая начальные значения:
- // начальное выводимое значение value - 1
- // количество выводимых значений count - 1
- // и собственно число N
- DrawPicture(1, 1, N);
- // ожидаем ввод пользователя для предотвращения завершения приложения
- Console.ReadLine();
- }
- // выводим указанное число value в цикле count раз
- // (с последующим переводом строки)
- public static void DrawPictureRow(int value, int count)
- {
- for (int index = 0; index < count; ++index)
- {
- Console.Write(value);
- }
- Console.WriteLine();
- }
- // собственно рекурсивный метод отрисовки
- public static void DrawPicture(int value, int count, int N)
- {
- // если количество выводимых символов строго меньше N
- if (count < N)
- {
- // рисуем верхнюю строчку
- DrawPictureRow(value, count);
- // запускаем рекурсию - теперь будем выводить значение value + 1
- // count + 2 раз
- // значение N передаём без изменений - оно служит для проверки условия прерывания рекурсии
- DrawPicture(value + 1, count + 2, N);
- // рисуем симметричную верхней нижнюю строчку
- DrawPictureRow(value, count);
- }
- else
- {
- // count стал равен или больше N - выводим текущее значение value N раз
- // и начинаем отсюда "разворачивать" рекурсию для отрисовки симметричных строчек
- DrawPictureRow(value, N);
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д