Рекурсивная функция для вывода на экран следующей картинки - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день, помогите с задачей. Заранее всем спасибо! Дано натуральное число n . Разработать рекурсивную функцию для вывода на экран следующей картинки: 1 (1 РАЗ) 222 (3 РАЗА) 33333 (5 раз) ... (n раз) 33333 (5 раз) 222 (3 РАЗА) 1 (1 РАЗ)
Листинг программы
  1. using System;
  2. namespace dd
  3. {
  4. class Program
  5. {
  6. static ulong fun(int max_n, int n = 1, int digit = 1)
  7. {
  8. if (n > max_n) return;
  9. for (int i = 0; i < (max_n - n + 1) / 2; ++i) Console.WriteLine(' ');
  10. for (int i = 0; i < n; ++i) Console.WriteLine("{2}", digit);
  11. if (n + 2 > max_n) return;
  12. fun(max_n, n + 2, digit + 1);
  13. for (int i = 0; i < (max_n - n + 1) / 2; ++i) Console.WriteLine(' ');
  14. for (int i = 0; i < n; ++i) Console.WriteLine("{2}", digit);
  15. }
  16. static void Main()
  17. {
  18. Console.WriteLine("Введите (N):");
  19. long N = Convert.ToInt64(Console.ReadLine());
  20. Console.WriteLine("Рекурсивный вызов:" , n, fun(n));
  21. }
  22. }
  23. }

Решение задачи: «Рекурсивная функция для вывода на экран следующей картинки»

textual
Листинг программы
  1. using System;
  2.  
  3. namespace RecursiveAlgorithms
  4. {
  5.     public class NumericPicture
  6.     {
  7.         public static void Main(string[] args)
  8.         {
  9.             // вводим с консоли число N
  10.             Console.Write("Введите число N: ");
  11.             int N = int.Parse(Console.ReadLine());
  12.            
  13.             // запускаем рекурсивный метод DrawPicture, указывая начальные значения:
  14.             // начальное выводимое значение value - 1
  15.             // количество выводимых значений count - 1
  16.             // и собственно число N
  17.             DrawPicture(1, 1, N);
  18.            
  19.             // ожидаем ввод пользователя для предотвращения завершения приложения
  20.             Console.ReadLine();
  21.         }
  22.        
  23.         // выводим указанное число value в цикле count раз
  24.         // (с последующим переводом строки)
  25.         public static void DrawPictureRow(int value, int count)
  26.         {
  27.             for (int index = 0; index < count; ++index)
  28.             {
  29.                 Console.Write(value);
  30.             }
  31.             Console.WriteLine();
  32.         }
  33.        
  34.         // собственно рекурсивный метод отрисовки
  35.         public static void DrawPicture(int value, int count, int N)
  36.         {
  37.             // если количество выводимых символов строго меньше N
  38.             if (count < N)
  39.             {
  40.                 // рисуем верхнюю строчку
  41.                 DrawPictureRow(value, count);
  42.                
  43.                 // запускаем рекурсию - теперь будем выводить значение value + 1
  44.                 // count + 2 раз
  45.                 // значение N передаём без изменений - оно служит для проверки условия прерывания рекурсии
  46.                 DrawPicture(value + 1, count + 2, N);
  47.                
  48.                 // рисуем симметричную верхней нижнюю строчку
  49.                 DrawPictureRow(value, count);
  50.             }
  51.             else
  52.             {
  53.                 // count стал равен или больше N - выводим текущее значение value N раз
  54.                 // и начинаем отсюда "разворачивать" рекурсию для отрисовки симметричных строчек
  55.                 DrawPictureRow(value, N);
  56.             }
  57.         }
  58.     }
  59. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы