Hola chicos, como estoy un poco aburrido estos días, les escribiré un tutorial para que no estén tristes :< ¡Comencemos!
1. El concepto de recursividad
Para entender la recursividad, primero hay que entender la recursividad.
El concepto de recursión es difícil de entender para un programador al principio, ¡así que veamos algunos ejemplos concretos antes de entrar en su concepto completo!
Supongamos que vas al dormitorio a cambiarte de ropa, rápido para llegar a tiempo al trabajo. Pero encuentras la habitación cerrada con llave y sabes que tu hijo de 3 años los esconde en una caja. Al abrir la caja, verá que incluye muchas otras subcajas que en su interior incluyen muchas cajas más pequeñas. Está confundido y necesita encontrar una solución rápidamente para no llegar tarde al trabajo

- Para manejar este problema, tenemos 2 enfoques: “bucle” (bucle) y “recursión” (recursión) para crear un algoritmo.

- En el primer enfoque usamos un bucle. Hasta que se acabe la caja, sacará 1 caja de la pila de cajas y la abrirá.
- Caso 1 : Si encuentras la llave :v ¡Felicitaciones por tu éxito!
- Caso 2 : ¡Pero si no tienes suerte, encuentras otras cajas, ponlas en la pila de cajas y haz lo mismo!
Lo demostraré en pseudocódigo C++ como este, usando una cola para almacenar un montón de cajas:
void look_for_key()
{
bool ok = false;
queue < box > pile;
pile.push(main_box);
while(!pile.empty())
{
box this = pile.front();
pile.pop();
for(item_in_this)
if(is_a_key(item))ok =true,break;
else // item is a box
q.push(item);
if(ok) break;
}
}
- Segundo enfoque, usaremos recursión. Recuerda siempre que la recursividad es una función que se llama a sí misma.
// init ok = false;
void look_for_key(box)
{
if(ok)
break;
for(item_in_this)
if(is_a_key(item))
ok =true, break;
else // item is a box
look_for_key(item);
}
Análisis : Veo que abriré la caja, si encuentro la llave, ¡por supuesto que está hecho! Y si vemos la caja, ¡realizaremos las mismas operaciones que cuando abrimos la caja original!
A través del ejemplo anterior, ¡puedes imaginar un poco qué es la recursividad!
Recursión es un método usado en un programa de computadora que usa una función de devolución de llamada.

2. Mecanismo de recursividad en informática
El ejemplo anterior puede hacerte pensar que la recursión es confusa, no simple y te frustra :< Haz tu mejor esfuerzo porque muchos algoritmos usan recursión en informática. Veremos cómo funciona la recursión, que es el mecanismo de apilado al llamar funciones
“En informática, una pila (también llamada apilador, en inglés: stack) es una estructura de datos abstracta que opera según el principio de “último en entrar, último en salir” antes de” (Last In Primero en salir (LIFO)” - Wikipedia.
- Recursión a menudo usa el mecanismo de pila LIFO: último en entrar y salir antes de llamar a las funciones.
- Cuando se llama a una función recursiva más tarde, se coloca en la parte superior de la pila. Imagina que tienes una pila de libros, cuando pones o quitas un libro, siempre priorizas el libro de arriba.

¡Veamos un ejemplo específico relacionado con matemáticas, factorial!
También tenemos 2 enfoques, transversal y recursivo, ¡pero aquí solo consideramos enfoques sobre recursión! ¡Te mostraré cómo funciona la pila en una llamada recursiva! ¡Primero, escribiré una función recursiva que calcule el factorial de un número!
Por ejemplo, el factorial de 5 se calculará como
factorial (5) = 5 * 4 * 3 * 2 * 1 = 5!
int fact(int x) // factorial
{
if(x==1) return 1;
return fact(x-1)*x;
}
- Ahora veamos que pasa cuando llamamos a la función para calcular el factorial de 3
fact(3):

- Explicar :
fact(3)-> la función comprueba si x es igual a 1 o no, pero aquí x = 3 por lo que la expresión lógicax == 1resultará enfalso. En este momento, la función llamará a la funciónfact(x-1)que significafact(2)-
En este punto, la función llamada
fact(2)se colocará en la parte superior de la pila. Seguimos haciéndolo. -
fact(2)-> es similar afact(3), la función comprueba si x es igual a 1 o no, pero aquí x = 2, por lo que la función llamará afact(1)y lo colocará pilahecho (1) -
fact(1)-> la función comprueba si es verdadero igual a 1, por lo que el resultado devolverá1. Ahora la pila consta de 3 funciones, saque la funciónfact(1)que se insertó antes. -
Continúe obteniendo la función
fact(2), el resultado esfact(2) = fact(1) * 2 = 2! - Finalmente obtén la función
fact(3), obtenemosfact(3) = fact(2) * 3 = 3!
- Comentario : En una función recursiva siempre hay una condición que crea un punto de interrupción para la recurrencia. ¡Sin un punto de interrupción, la recursividad es como un bucle infinito!
¿Ya encontraste la llave?
- Volvamos al primer problema de cómo encontrar la llave. Recordamos que el primer método era hojear frente a la pila de cajas.

- Notamos que para recursión no tenemos montones de cajas. De hecho, con el enfoque recursivo, ¡la pila de cajas es la
pilade funciones de llamada!¡Y gracias a la recursividad, finalmente encontramos la llave y abrimos la habitación!

3. ¡Aplica recursividad a algoritmos específicos!
“El primer día que entré a la clase, me sorprendió. Mis amigos se hacían preguntas sobre matemáticas e informática. Dondequiera que iba, escuchaba la palabra “regla”. Cada lección podía resolverse con “regla”. esta palabra es tan buena, es tan hermosa. Solo más tarde descubrí que escuché mal la palabra “recursión”.”- cita ¿Cómo aprendí informática? - VNOI
- La recursividad se utiliza en la mayoría de los algoritmos y estructuras de datos importantes, como el árbol de segmentos/árbol de intervalos, el árbol BIT, algoritmos gráficos como BFS, DFS.
- Presta atención a las características importantes: es la condición de parada de la recursión, recuerda muy bien, si no hay condición de parada, no podrás salir de la recursión :v.

- En la siguiente parte, lo guiaré a través de una técnica de desarrollo de recursividad, que es la base de QHD - programación dinámica, ¡una técnica bastante común y que resuelve muchos problemas difíciles!
Fuente de referencia
[primero. Cómo funciona la recursividad: explicado con diagramas de flujo y un video
