Рекурсивні методи

Вправи з використанням рекурсивних методів.

1. Арифметична прогресія

Завдання: Написати програму для виводу n перших членів арифметичної прогресії 1, 2, 3… з використанням рекурсивного методу.

Рішення
using System;

class Program
{
    static uint ArithmeticProgression(uint n)
    {
        if (n == 0)
        {
            return 1;
        }
        return ArithmeticProgression(n - 1) + 1;
    }

    static void Main(string[] args)
    {
        Console.Write("N = ");
        var n = Convert.ToUInt32(Console.ReadLine());
        for (uint i = 0; i < n; i++)
        {
            Console.WriteLine(ArithmeticProgression(i));
        }

        Console.ReadLine();
    }
}

2. Сума n перших членів арифметичної прогресії

Завдання: Напишіть програму для отримання суми n перших членів арифметичної прогресії. Різницю прогресії d задавати в якості параметру.

Рішення
using System;

class Program
{
    static uint ArithmeticProgression(uint n, uint d)
    {
        if (n == 0)
        {
            return d;
        }

        return ArithmeticProgression(n - 1, d) + d;
    }

    
    static void Main(string[] args)
    {
        Console.Write("N = ");
        var n = Convert.ToUInt32(Console.ReadLine());
        Console.Write("d = ");
        var d = Convert.ToUInt32(Console.ReadLine());

        var sum = 0u;
        for (var i = 0u; i < n; i++)
        {
            sum += ArithmeticProgression(i, d);
        }

        Console.WriteLine($"Сума {n} перших членів арифметичної прогресії рівна {sum}");
        Console.ReadLine();
    }
}

3. Переворот рядка

Завдання: Напишіть програму для перевороту рядка з використанням рекурсії. Рядок “abс” перевертається в “cba”.

Рішення
using System;

class Program
{
    static string Reverse(string s)
    {
        if (string.IsNullOrEmpty(s))
        {
            return s;
        }

        return Reverse(s.Substring(1)) + s[0].ToString();
    }

    
    static void Main(string[] args)
    {
        Console.Write("Введіть рядок: ");
        var inputText = Console.ReadLine();
        Console.WriteLine("Перевернутий рядок: " + Reverse(inputText));
        Console.ReadLine();
    }
}

4. Індекс максимального елемента масиву

Завдання: Напишіть програму для знаходження індексу максимального елементу масиву з використанням рекурсії.

Рішення
using System;

class Program
{
    static int IndexOfMax(int[] array, int len)
    {
        if (len == 0)
        {
            return len;
        }

        var i = IndexOfMax(array, len - 1);
        return array[len] > array[i] ? len : i;
    }

    static void Main(string[] args)
    {
        var a = new[] { 0, 5, 6, 1, 9, 7, 8, 3, 2, 4 };
        Console.WriteLine("Індекс максимального елемента масиву: " + IndexOfMax(a, a.Length - 1));
        Console.ReadLine();
    }
}

Дивіться також: