Recursividad en C#


Ya hemos hablado sobre el concepto genérico de RECURSIVIDAD y se han mencionado algunos ejemplos.

Desde el entorno computacional y específicamente a nivel de programación un ejemplo clásico al nivel introductorio es el cálculo del "factorial de un número".

Sabemos por definición que:
n! = n · (n-1) · (n-2) · ... · 3 · 2 · 1
(Así, el factorial de 4 es 4 · 3 · 2 · 1 = 24)
Si pensamos que el factorial de n-1 es
(n-1)! = (n-1) · (n-2) · (n-3) · ... · 3 · 2 · 1
Entonces podemos escribir el factorial de un número a partir del factorial del siguiente número:
n! = n · (n-1)!
Esta es la definición recursiva del factorial.

Un programa elemental en C# a nivel de consola sería:


using
System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

 

namespaceFactorial

{

   public class Ejemplo

   {

       public static long fact(int n)

       {

           if (n==1)

               return 1;

               return n * fact (n-1); // Si no es 1, se genera la recursividad

       }

                    

   public static void Main()

   {

       int num;

       Console.WriteLine("Introduzca un número entero: ");

       num = Convert.ToInt32(System.Console.ReadLine());

       Console.WriteLine("Su factorial es: {0}", fact(num));

       Console.ReadKey();

   }

   }

}

 

Ahora es MUY IMPORTANTE comprobar que hay salida de la función, para que nuestro programa no se encicle dejando al computador "colgado".
La función factorial crece aceleradamente, así que no conviene trabajar con números grandes: el factorial de 20 es 2432902008176640000, por lo que se debe tener cuidado al elegir variables y su declaración y tipo. Se ha insistido en este concepto ya que es más importante de lo que podría suponerse ya que muchos problemas complicados se pueden expresar a partir de otro más sencillo. En tales casos, ese problema se podrá expresar de forma recursiva. Más adelante veremos algún otro ejemplo.

Ejercicios propuestos:
• Crear un programa que emplee recursividad para calcular un número de la serie Fibonacci (en la que los dos primeros elementos valen 1, y para los restantes, cada elemento es la suma de los dos anteriores).
• Crear, tanto de forma recursiva como de forma iterativa, una función diga si una cadena de caracteres es simétrica (un palíndromo). Por ejemplo, "DABALEARROZALAZORRAELABAD" es un palíndromo.
• Crear un programa que determine si un número N es primo, de manera recursiva. Ampliar el programa de manera que escriba la lista de número primos entre 2 y N.