MyLeoNes™

Recursión — Informática, 11–13

La recursión resuelve un problema grande aplicando la misma regla a una versión más pequeña, hasta llegar a un punto sencillo de parada.

Una regla que se llama a sí misma

En la recursión, una instrucción resuelve una parte y después pide a la misma instrucción que resuelva una parte más pequeña. También debe saber cuándo parar: ese es el caso base. El dibujo de una rama muestra la idea: cada rama se divide en ramas menores, pero la ramita más pequeña ya no vuelve a dividirse.

¿Por qué usar recursión?

Algunas cosas están hechas de copias más pequeñas del mismo tipo: las carpetas contienen carpetas, los árboles familiares se dividen en ramas y los mapas contienen regiones dentro de regiones. Una lista larga de instrucciones separadas sería difícil de escribir y cambiar. La recursión surgió para describir estas estructuras anidadas con una regla clara, en vez de repetir código parecido.

Hacer una cuenta atrás

Usa una regla llamada cuenta(n): si n es 0, para; si no, muestra n y llama a cuenta(n−1). Empieza con cuenta(3). Muestra 3, después llama a cuenta(2), que muestra 2 y llama a cuenta(1). Esta muestra 1 y llama a cuenta(0); el caso base detiene todo, así que el resultado final es 3, 2, 1.

Olvidar la parada

Una regla recursiva puede parecer elegante, por eso es tentador dejar que se llame a sí misma sin comprobar un caso base. Es un error comprensible: parece que las tareas pequeñas acabarán desapareciendo. Sin una parada, el valor puede no llegar nunca al final y el ordenador sigue creando llamadas inacabadas hasta quedarse sin espacio o mostrar un error.

Carpetas y formas ramificadas

Los exploradores de archivos pueden buscar en una carpeta y después en cada carpeta que haya dentro, aunque estén muy anidadas. Los programas de dibujo también usan recursión para plantas ramificadas, formas parecidas a copos de nieve y caminos de laberintos. No necesitas recursión para toda acción repetida; resulta más útil cuando cada parte contiene partes menores con la misma estructura.

Sigue explorando

Otros idiomas

Cargando MyLeoNes™…