Metodos recursivos y recursivos - FernandoCalmet/csharp-essential GitHub Wiki

¿Qué es la recursividad?

La recursividad es un concepto en el que el método se llama a sí mismo. Cada método recursivo debe terminarse, por lo tanto, debemos escribir una condición en la que verifiquemos si se cumple la condición de terminación. Si no hacemos eso, un método recursivo terminará llamándose a sí mismo sin cesar.

Ejemplo 1: Cree una aplicación que calcule la suma de todos los números desde n hasta m de forma recursiva:

class Program
{
    public static int CalculateSumRecursively(int n, int m)
    {
        int sum = n;

        if(n < m)
        {
            n++;
            return sum += CalculateSumRecursively(n, m);
        }

        return sum;
   }

    static void Main(string[] args)
    {
        Console.WriteLine("Enter number n: ");
        int n = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Enter number m: ");
        int m = Convert.ToInt32(Console.ReadLine());

        int sum = CalculateSumRecursively(n, m);

        Console.WriteLine(sum);

        Console.ReadKey();
    }
}

Explicación del código

El método CalculateSumRecursively es nuestro método recursivo que calcula la suma de los números desde n hasta m. Lo primero que hacemos es establecer nuestro sum en el valor de n. Luego, verificamos si el valor de n es menor que el valor de m. Si es así, aumentamos el valor de n en 1 y sumamos a nuestro sum resultado a del mismo método pero con el aumento n. Si no es así, simplemente devolvemos el valor de la sum variable.

C# reservará almacenamiento de memoria para cada método recursivo para que los valores del método anterior no se anulen.

Entonces, veamos nuestro ejemplo a través del diagrama:

img01

Ejemplo adicional

Practiquemos un poco más con el ejemplo 2: Cree una aplicación que imprima cuántas veces el número se puede dividir por 2 de manera uniforme:

class Program
{
    public static int CountDivisions(double number)
    {
        int count = 0;

        if(number > 0 && number % 2 == 0)
        {
            count++;
            number /= 2;

            return count += CountDivisions(number);
        }

        return count;
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Enter your number: ");
        double number = Convert.ToDouble(Console.ReadLine());

        int count = CountDivisions(number);
        Console.WriteLine($"Total number of divisions: {count}");

        Console.ReadKey();
    }
}