• Home
  • About
    • Josué Romero photo

      Josué Romero

      Don't follow your dream, follow me!

    • Learn More
    • Email
    • Twitter
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Parte 1: ¿Qué es la recursividad?

03 Jun 2023

Reading time ~5 minutes

enl

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

Ejemplo

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

Iteración y recursividad

  • 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.

Ejemplo de recursión

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.

pila

¡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):

ilustración

  • 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ógica x == 1 resultará en falso. En este momento, la función llamará a la función fact(x-1) que significa fact(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 a fact(3), la función comprueba si x es igual a 1 o no, pero aquí x = 2, por lo que la función llamará a fact(1) y lo colocará pila hecho (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ón fact(1) que se insertó antes.

    • Continúe obteniendo la función fact(2), el resultado es fact(2) = fact(1) * 2 = 2!

    • Finalmente obtén la función fact(3), obtenemos fact(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.

primer problema

  • Notamos que para recursión no tenemos montones de cajas. De hecho, con el enfoque recursivo, ¡la pila de cajas es la pila de funciones de llamada!

    ¡Y gracias a la recursividad, finalmente encontramos la llave y abrimos la habitación!

fin

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.

Ejemplo de recursión

  • 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

2. Recursión - Wikipedia

Si ha terminado de leer este artículo y todavía no entiende qué es la recursividad :> ¡vea mi parte 2 en aquí!



recursion Share Tweet +1