¿Qué es una llamada recursiva?
En programación, una llamada recursiva es un comando dentro de una subrutina o función que le dice al programa que ejecute la misma subrutina nuevamente. La ejecución repetida puede ser el resultado directo de la función, o puede activarse una segunda función que, a su vez, se refiere nuevamente a la primera función. Una llamada recursiva tiene algunas similitudes con el temido bucle infinito, pero la subrutina siempre tiene una declaración condicional que le dice al programa cuándo dejar de repetir la recursión.
El concepto de recursión quizás se ilustra mejor mediante el uso de un ejemplo. Supongamos que un techador está aplicando tejas nuevas a una casa. Para comenzar, debe llevar un paquete de tejas al techo. Una vez que haya clavado el primer paquete en su lugar, debe bajar la escalera, recuperar otro paquete y clavarlo en su lugar. El proceso continúa como una serie de "ir, buscar, volver" hasta que se haya aplicado la última teja. En ese momento, el techador es libre de pasar al siguiente trabajo o irse a casa.
Aunque el ejemplo es una simplificación excesiva, contiene todos los elementos de una llamada recursiva. Hay un punto de partida, el techador debe recuperar lo que necesita, volver al principio y, cuando se cumpla la condición final, detenerse. Esto es básicamente lo que hace el programa; comienza, implementa una acción, vuelve a sí mismo y termina cuando se produce la condición final.
La condición final se conoce como el caso base. Es esencial para todas las llamadas recursivas; sin ella, la función continuaría repitiéndose. En el mejor de los casos, esto da como resultado el drenaje de los recursos de memoria del sistema. Normalmente, la sobrecarga bloqueará el programa en algún momento, pero para cuando se descubra el problema, se puede hacer un daño significativo.
Los programadores experimentados pueden reconocer la similitud entre una llamada recursiva y un bucle "for" o "while". Si, por ejemplo, el objetivo es encontrar el recuento de inventario total de todas las existencias con números de pieza superiores a 999, un ciclo "for" le dice al programa que ubique todas las instancias calificadas y un ciclo "while" le dice al programa que ejecute el ciclo solo mientras la condición establecida sea válida. Se podría decir que una llamada recursiva combina algunas de las características de estos bucles con una instrucción "si-entonces-otro"; Si esta condición es verdadera, haga esto o haga algo diferente si la condición es falsa. Sin embargo, la recursión generalmente permite un código más compacto y permite que el problema pase a la función más cercana al punto en que se necesita.