¿Qué es la recursión?

La recursión o recurrencia, es una manera de especificar cosas basándose en su propia definición. Por ejemplo, seguramente has escuchado o visto unos objetos geométricos llamados fractales, estos objetos geométricos presentan la cualidad de autoreferenciarse de forma recursiva de tal manera que su definición está basada en si misma.

En programación se utiliza la recursión para solucionar problemas complejos, dividiendo la solución final en soluciones del mismo problema pero con datos más sencillos o con menos datos. Las funciones recursivas son aquellas que se llaman a sí mismas durante su propia ejecución.

Ejemplos interactivos

La forma más sencilla de utilizar la recursión es cuando queremos repetir una misma acción un número fijo de veces. Por ejemplo, supongamos que queremos colocar 10 botones en la escena, colocando cada botón en una fila, claramente podríamos construir cada uno de los botones directamente sin la necesidad de crear una función recursiva, pero ahora imagina que quieres colocar 100 o 1000 o 10000 botones, hacer esto de forma directa ya no se oye tan simple ni divertido.

Entonces para simular un ciclo de repeticiones, necesitamos crear una función recursiva, por ejemplo: construye_botones(contador); la cual va a tener como parámetro un contador, con el que vamos a llevar el registro de cuantas veces vamos a repetir nuestro ciclo. En cada ejecución de la función construye_botones vamos a decrementar el valor del contador y necesitamos una condicional ((condición)?si_se_cumple_la_condición: no_se_cumple_la_condición;) de tal manera que si el contador es mayor que cero, vamos a seguir ejecutando la función con el nuevo valor del contador, y si el contador llega a cero entonces terminamos la ejecución.

En el siguiente ejemplo puedes observar este programita sencillo que crea y coloca 10 botones en el área de dibujo de YoProgramo.




Otro ejemplo de recursión, sería si quisiéramos calcular la suma de los primeros $n$ números naturales, sin utilizar la formula clásica: $\frac{n(n+1)}{2}$, tendríamos que realizar una suma repetida desde $n$ hasta $1$. Si creamos la función suma_naturales(n) que sería la función correspondiente a la suma de los primeros números naturales, si n:=10; tendríamos que calcular suma_naturales(10), lo que recursivamente se expande a 10 + suma_naturales(9), y esto se expande a 10 + 9 + suma_naturales(9) y así sucesivamente hasta tener 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + suma_naturales(1) y para el caso donde n:=1 tenemos nuestra condición de salida para evitar seguir repitiendo la ejecución de la función de forma infinita, teniendo que como ultima expansión 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1, lo que nos da la suma deseada.

En el siguiente ejemplo interactivo, puedes ver la programación de la función que calcula la suma de los primeros números naturales utilizando recursión. Observa que necesitas una condicional ((condición)?si_se_cumple_la_condición:no_se_cumple_la_condición;) para decidir cuando terminamos de ejecutar la misma función. También observa que en cada llamada a la función suma_naturales al parámetro que recibe se le resta uno, esto para garantizar que siempre vamos haciendo que el valor sea más simple y se acerque a la condición de salida.

Notas

La recursión es un tema avanzado de computación, que no todos comprenden a la primera (existen doctores en matemáticas con años de experiencia programando que les cuesta trabajo programar utilizando recursión), así que no te desanimes si te parece extraño o difícil de comprender. Solo ten en mente que la recursión es una idea muy poderosa que permite realizar de forma sencilla diversos programas de computadora.

Si no sabes cómo funciona el control de entrada utilizado para realizar el ejemplo anterior, puedes revisar la información ¿Qué es un control de entrada?, de igual forma si no conoces cómo funciona un botón puedes revisar ¿Qué es un botón?.