¿Qué es una llamada recursiva?
En la 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. El rendimiento de repetición puede ser el resultado directo de la función, o se puede activar una segunda función que, a su vez, se refiere 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 se ilustra mejor mediante el uso de un ejemplo. Supongamos que un techador está aplicando nuevas tejas 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 por la escalera, recuperar otro paquete y clavarlo en su lugar. El proceso continúa como una serie de "ir, buscar, regresar" 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 iS una simplificación excesiva, contiene todos los elementos de una llamada recursiva. Hay un punto de partida, el techador debe recuperar lo que necesita, regresar al principio y, cuando se cumpla la condición final, se detenga. Esto es básicamente lo que hace el programa; Comienza, implementa una acción, regresa a sí misma y termina cuando ocurre 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 repitiendo. En el mejor de los casos, esto da como resultado drenar 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 daño significativo.
Los programadores experimentados pueden reconocer la similitud entre una llamada recursiva y un bucle "para" o "while". Si, por ejemplo, el objetivo es encontrar el recuento total de inventario de todas las acciones con la Parte NUmbers superiores a 999, un bucle "para" le dice al programa que localice todas las instancias de calificación y un bucle "mientras" le dice al programa que ejecute el bucle solo mientras la condición declarada es válida. Se podría decir que una llamada recursiva combina algunas de las características de estos bucles con una declaración de "si-Then-else"; Si esta condición es verdadera, entonces haz esto o haz 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 se pase a la función más cercana al punto que se necesita.