Funciones
11. Recursividad
La recursividad en programación ocurre cuando una función se llama a sí misma para resolver un problema en partes más pequeñas hasta alcanzar un punto final.
Ejemplo clásico: Factorial recursivo
Veamos primero una función recursiva sencilla para calcular el factorial de un número:
Concepto matemático: n!=n×(n−1)!n!=n×(n−1)!
Implementación en C++:
#include <iostream>
using namespace std;int factorial(int n);// Prototipo Función factorial recursiva
}
int main() {
int numero = 5;
cout << "El factorial de " << numero << " es: " << factorial(numero);
return 0;
}
//Declaración de la función de Factorial
int factorial(int n) {
// Caso base
if (n <= 1) {
return 1;//Punto final!!
}
// Caso recursivo
else {
return n * factorial(n - 1);
}
Otro ejemplo: Serie Fibonacci
Recordando, la serie de Fibonacci tenía la siguiente ley: 0, 1, 1, 2, 3, 5, 8, ...
Semillas (dos primeros términos 0 y 1), luego el termino n para n>=3 se logra sumado, es decir x3=x2+x1 o en general xn=xn-1+xn-2 en otras palabras obtengo un termino sumando los dos anteriores.
Implementación en C++:
#include <iostream>
using namespace std;
int fibonacci(int n);//Prototipo
int main() {
int num = 6;//Calcula los terminos de fibo hasta num
cout << "El fibonacci de " << num << " es: " << fibonacci(num);
return 0;
}
//Declaración de la función de Fibonacci
int fibonacci(int n) {
// Casos base
if (n == 0) return 0;
if (n == 1) return 1;
// Caso recursivo
return fibonacci(n - 1) + fibonacci(n - 2);
}
✅ Ventajas
-
Código más claro y elegante para ciertos problemas.
-
Fácil de implementar y entender en problemas pequeños.
❌ Desventajas
-
Puede consumir más memoria debido a múltiples llamadas.
-
Más lento en ciertos problemas comparado con iteración.
-
Riesgo de desbordamiento de pila (Stack Overflow).
Otro ejemplo: Convertir un decimal a binario
#include <iostream>
using namespace std;
void decimalABinario(int numero);//Prototipo
int main() {
int numero = 13;
cout << "El número " << numero << " en binario es: ";
decimalABinario(numero);
return 0;
}// Declaración de la Función recursiva
void decimalABinario(int numero) {
if (numero < 2) { // Caso base
cout << numero;
return;
}
decimalABinario(numero / 2); // Caso recursivo
cout << numero % 2; // imprime el resto después de la llamada recursiva
}