Рекурсивная функция для вывода на экран следующей картинки - 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);
            }
        }
    }
}

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


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

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

14   голосов , оценка 4.143 из 5
Похожие ответы