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