Por José Pablo Fonseca Rojas – Estudiante de la carrera de Informática

Las funciones recursivas son funciones matemáticas que pueden ser evaluadas algorítmicamente. Según Allen (2013), se dice que es recursivo cuando un método está parcialmente definido en términos de sí mismo. Gracias a esto se puede determinar que la recursividad es cuando se tienen diversos métodos recursivos, lo cual en muchas situaciones permite la reutilización de código logrando la optimización del código y reduciendo este en longitud. Esta función está presente en diversos lenguajes de programación y es utilizada por la gran mayoría de programadores por la versatilidad que presenta.

Una vez comprendido lo anterior, encontramos que existen dos formas de métodos recursivos, el directo y el indirecto. Chlu (2014) indica que hay dos fases para la implementación de la recursividad de forma exitosa y sin perder de vista el concepto de la recursividad. Estas dos fases corresponden al caso base y luego la llamada recursiva. Dentro de estas dos características se encuentra que el caso base es el encargado de determinar el inicio y el fin de la recursividad, y si este no se cumple se presentaría un caso de “Stack Overflow ”. La llamada recursiva corresponde al método que va a desarrollar la recursividad hasta que el caso base permita que finalice el proceso.

Previamente se mencionaron dos tipos de recursividad, los cuales se denominaban como directo e indirecto. Para comprender su diferencia, Joyanes y Zahonero (2008) determina que, en la recursividad directa, un método f() contiene dentro de su secuencia una invocación hacia f(), esto significa que el contenido dentro de la secuencia ejecuta la recursividad y, posteriormente, altera la condición de salida cuando se invoca a sí mismo al final de la secuencia previamente mencionada. Por su parte, la recursividad indirecta presenta un método f() que invoca a un método g(), este proceso se desarrolla hasta que regresa al método f(), esto significa que el método base invoca otro método para que altere la condición de salida, donde luego lo que es desarrollado es devuelto al método base para la verificación de la condición que permite el fin de la recursividad. En los casos previamente explicados destaca que el método f() quien controla la recursividad y permite el fin de esta.

Con todo lo anterior, Joyanes y Zahonero (2008) indica que hay ciertas directrices necesarias a la hora de aplicar la recursividad, en las que este tipo de solución solo debe ser utilizada cuando una solución iterativa sencilla no sea posible. También, cuando se aplique una recursión, se debe considerar que en caso de que la solución pueda ser desarrollada tanto por recursividad como de forma iterativa, la recursividad tomará más tiempo, ya que podría necesitar la utilización de métodos adicionales, lo que restaría eficiencia y optimización. Como consideración final se puede determinar que, en ciertos casos, las soluciones recursivas pueden ser más simples de desarrollar que las iterativas; sin embargo, estas presentan un aumento en tiempo de ejecución y en la cantidad de memoria que utilizan.

Gracias a todo lo anterior, se pueden determinar ventajas y desventajas de la utilización de la recursividad dentro de la programación. Su uso depende de la situación que se presenta y la forma en la que se desea llegar a la solución. Por tanto, los puntos expuestos en esta investigación son una buena base para considerar su uso o no.

 

MOXIE es el Canal de ULACIT (www.ulacit.ac.cr), producido por y para los estudiantes universitarios, en alianza con el medio periodístico independiente Delfino.cr, con el propósito de brindarles un espacio para generar y difundir sus ideas.  Se llama Moxie - que en inglés urbano significa tener la capacidad de enfrentar las dificultades con inteligencia, audacia y valentía - en honor a nuestros alumnos, cuyo “moxie” los caracteriza.

Referencias bibliográficas:
• Allen, M. (2013). Estructuras de datos en Java (4a edición). Madrid: Pearson
• Chlu, D. (02 de enero de 2014). Recursion (in Computer Science). Recuperado de https://brilliant.org/discussions/thread/recursion-in-computer-science/
• Joyanes, L. Zahonero, I. (2008). Estructuras de datos en Java. Recuperado de https://www.academia.edu/16284843/Estructura_de_datos_en_java