PASO 1: Concepto de Recursividad
La recursividad es un concepto fundamental en informática donde una función se llama a sí misma, directa o indirectamente, para resolver un problema dividiéndolo en subproblemas más pequeños de la misma naturaleza.
Para que un procedimiento recursivo finalice correctamente y no genere un ciclo infinito o desbordamiento de pila (stack overflow), debe estructurarse con dos componentes esenciales:
Condición de término que devuelve un valor conocido sin llamadas recursivas adicionales. Detiene la recursión.
Sección donde el problema se reduce y la función se invoca a sí misma con parámetros simplificados.
Figura: Concepto Visual de Recursividad
PASO 2: Sintaxis en C++
La estructura básica de una función recursiva en C++ usa if-else para bifurcar entre caso base y caso recursivo:
tipo_dato nombre_funcion(tipo_parametro parametro) {
if (condicion_caso_base) {
return valor_caso_base; // Detiene la recursión
} else {
return expresion_con_llamada; // Reduce el problema
}
}
PASO 3: Declaración de la Función Recursiva Factorial
#include <iostream> y declara factorial antes de main().
El factorial de n se define como n! = n × (n-1)! con casos base 0! = 1 y 1! = 1.
#include <iostream>
using namespace std;
long long factorial(int n) {
// Caso Base
if (n <= 1) {
return 1;
}
// Procedimiento Recursivo
else {
return n * factorial(n - 1);
}
}
PASO 4: Declaración de la Variable de Entrada
main(), declara la variable entera que almacenará el número del usuario.
int main() {
// Declaración de variable para entrada de datos
int numero;
return 0;
}
PASO 5: Lectura y Llamada Recursiva
cin para leer el número y llama a factorial(numero), mostrando el resultado con cout.
cout << "Inserta un numero entero positivo: ";
cin >> numero;
if (numero < 0) {
cout << "El factorial no esta definido para negativos." << endl;
} else {
cout << "El factorial de " << numero << " es: "
<< factorial(numero) << endl;
}
PASO 6: Código Fuente Completo Integrado
#include <iostream>
using namespace std;
// 1. Funcion recursiva Factorial
long long factorial(int n) {
if (n <= 1) {
return 1; // Caso Base
} else {
return n * factorial(n - 1); // Procedimiento Recursivo
}
}
int main() {
int numero;
cout << "Inserta un numero entero positivo: ";
cin >> numero;
if (numero < 0) {
cout << "El factorial no esta definido para negativos." << endl;
} else {
cout << "El factorial de " << numero << " es: "
<< factorial(numero) << endl;
}
return 0;
}
PASO 7: Análisis del Uso de la Recursividad
| Aspecto | Descripción |
|---|---|
| Claridad del Código | Expresa algoritmos matemáticos complejos de forma limpia y directa. |
| Caso Base | Garantiza que el algoritmo finalice, evitando ciclos infinitos. |
| Procedimiento Recursivo | Divide el problema en subproblemas más simples idénticos al original. |
| Uso de Memoria (Pila) | Cada llamada consume espacio en la pila (Call Stack) hasta el caso base. |
RETO: Sucesión de Fibonacci con Recursividad
Objetivo: diseñar e implementar una función recursiva en C++ que obtenga el n-ésimo término de Fibonacci (0, 1, 1, 2, 3, 5, 8, 13, 21, …).
Para n = 0 retorna 0. Para n = 1 retorna 1.
fibonacci(n-1) + fibonacci(n-2) para n > 1.
Código del Reto Bloqueado
Solicita la clave de desbloqueo a tu docente para ver el código de la solución Fibonacci.
❌ Clave incorrecta. Verifica con tu docente.
#include <iostream>
using namespace std;
int fibonacci(int n) {
if (n == 0) return 0; // Caso Base 1
if (n == 1) return 1; // Caso Base 2
return fibonacci(n - 1) + fibonacci(n - 2); // Recursivo
}
int main() {
int n;
cout << "=== RETO: FIBONACCI RECURSIVO ===" << endl;
cout << "Ingresa la posicion deseada (n >= 0): ";
cin >> n;
if (n < 0) {
cout << "Por favor, ingresa un numero no negativo." << endl;
} else {
cout << "El termino " << n << " de Fibonacci es: "
<< fibonacci(n) << endl;
}
return 0;
}
Test de Selección Múltiple (5 Preguntas)
Responde para evaluar tu comprensión. Tus respuestas se anexarán al reporte.