¿Qué es la recursión de cola?

En la programación de computadoras, la recursión de cola es el uso de una llamada de cola para realizar una función recursiva. Una llamada de cola es cuando una función se llama como el último acto de otra función. Por ejemplo, en este programa de JavaScript:

 var myTailFunc = function (myVar) {return myVar; }; var myFunc = function (myVar) {return myTailFunc (myVar); }; 

Aquí, la llamada a myTailFunc (myVar) es una llamada de cola porque es la última operación de myFunc (myVar) . Cuando el compilador ve que es la operación final de myFunc, puede realizar una pequeña optimización. Esencialmente, no es necesario insertar una dirección de retorno en la pila, ya que no tendrá que volver a myFunc . Puede devolver el valor de retorno de myTailFunc como el valor de retorno de myFunc .

Esta pequeña optimización se vuelve más significativa cuando se usa en una función recursiva. Normalmente, cada nivel de recursión requeriría una dirección de retorno adicional para ser insertada en la pila. La recursión de la cola hace que esto sea innecesario.

Aquí hay un ejemplo de una función factorial de JavaScript simple escrita primero sin, y luego con, recursión de cola.

Función factorial sin recursión de la cola.

 var factorial = function (n) {if (n == 0) {return 1; } else {return n * factorial (n - 1); }}; 

Esta función es recursiva, pero no recursiva de cola. El proceso final de la función es la operación de multiplicación (" * "), por lo que la recursión siempre tendrá que volver a la función de llamada.

Función factorial con recursión de la cola.

 var factorial = function (n) {var recursion = function (n, subTotal) {if (n == 0) {return subTotal; } else {return recursion (n - 1, n * subTotal); }}; retorno recursivo (n, 1); }; 

Función, términos de programación