Рекурсивная функция для вывода на экран следующей картинки - 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); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д