Nella programmazione di computer, la ricorsione di coda è l'uso di una chiamata di coda per eseguire una funzione ricorsiva. Una coda è chiamata quando una funzione viene chiamata come l'ultimo atto di un'altra funzione. Ad esempio, in questo programma JavaScript:
var myTailFunc = function (myVar) {return myVar; }; var myFunc = function (myVar) {return myTailFunc (myVar); };
Qui, la chiamata a myTailFunc (myVar) è una coda perché è l'ultima operazione di myFunc (myVar) . Quando il compilatore vede che è l'operazione finale di myFunc, può eseguire una piccola ottimizzazione. In sostanza, non è necessario inserire un indirizzo di ritorno nello stack, poiché non sarà necessario tornare a myFunc . Può restituire il valore di ritorno di myTailFunc come valore di ritorno di myFunc .
Questa piccola ottimizzazione diventa più significativa se utilizzata in una funzione ricorsiva. Normalmente, ogni livello di ricorsione richiederebbe un ulteriore indirizzo di ritorno da spingere nello stack. La ricorsione della coda rende questo non necessario.
Ecco un esempio di una semplice funzione fattoriale JavaScript scritta prima senza, e quindi con, ricorsione di coda.
Funzione fattoriale senza ricorsione della coda
var factorial = function (n) {if (n == 0) {return 1; } else {return n * factorial (n - 1); }};
Questa funzione è ricorsiva, ma non ricorsiva della coda. Il processo finale della funzione è l'operazione di moltiplicazione (" * "), quindi la ricorsione avrà sempre bisogno di tornare alla funzione chiamante.
Funzione fattoriale con ricorsione della coda
var factorial = function (n) {var ricorsione = function (n, subTotal) {if (n == 0) {return subTotal; } else {return ricursion (n - 1, n * subTotal); }}; ricorsione di ritorno (n, 1); };
Funzione, termini di programmazione