Funciones y Procedimientos

Recursividad


La recursividad es una técnica de programación donde una función se llama a sí misma para resolver un problema.

Cada vez que la función se llama, se trabaja sobre un problema más pequeño o más simple que el original, hasta llegar a una situación tan sencilla que ya no necesita seguir llamándose: el caso base.

Podemos pensar en la recursividad como un efecto dominó: cada llamada a la función empuja a la siguiente, y cuando llegamos al final (el caso base), las funciones comienzan a resolverse en orden inverso.


Partes esenciales de la recursividad:

  • Llamada recursiva: La función se llama a sí misma con un problema más pequeño.
  • Caso base: Es la condición que detiene las llamadas recursivas. Sin caso base, el programa nunca terminaría (causaría un "bucle infinito").
Sin caso base, el programa seguiría llamando a la función infinitamente, hasta provocar un error por desbordamiento de memoria ("Stack Overflow").
Ejemplo sencillo: Contar regresivamente
  Funcion ContarRegresivamente(n)
      Si n > 0 Entonces
          Escribir n;
          ContarRegresivamente(n-1);
      Sino
          Escribir "¡Fin!";
      FinSi
  FinFuncion
Llamada desde el programa principal:
  Proceso Principal
      ContarRegresivamente(5);
  FinProceso

¿Cómo funciona internamente la recursividad?

Cuando usamos recursividad, las llamadas se apilan en la memoria (como platos uno sobre otro).

Cuando llegamos al caso base, el programa comienza a desapilar (resolviendo cada llamada anterior en orden inverso).

Imagina este ejemplo:
  • ContarRegresivamente(3) llama a ContarRegresivamente(2)
  • ContarRegresivamente(2) llama a ContarRegresivamente(1)
  • ContarRegresivamente(1) llama a ContarRegresivamente(0)
  • ContarRegresivamente(0) muestra "¡Fin!" y termina.
Luego:
  • Se resuelve ContarRegresivamente(1)
  • Luego ContarRegresivamente(2)
  • Y finalmente ContarRegresivamente(3)
Ejemplo de función recursiva: Factorial de un número

El factorial de un número se define así:

  • 0! = 1
  • n! = n × (n-1)!
Código:
  Funcion factorial <- CalcularFactorial(n)
      Definir factorial Como Entero;
							
      Si n = 0 Entonces
          factorial <- 1;
      Sino
          factorial <- n * CalcularFactorial(n-1);
      FinSi
  FinFuncion
Uso en el programa principal:
  Proceso Principal
      Definir numero Como Entero;
							
      Escribir "Ingrese un número:";
      Leer numero;
							
      Escribir "El factorial es: ", CalcularFactorial(numero);
  FinProceso

¿Cuándo usar recursividad?

La recursividad es útil cuando:

  • El problema se puede dividir naturalmente en subproblemas más pequeños (por ejemplo, recorrer árboles o estructuras de datos).
  • Es más fácil o elegante escribir la solución recursiva que una iterativa (bucles).
Ejemplos típicos de uso de la recursividad:
  • Cálculo de factoriales.
  • Fibonacci.
  • Búsqueda en estructuras de datos como árboles.
  • Resolver laberintos.
  • Algoritmos de ordenamiento (como QuickSort o MergeSort).