Che cos’è una ricorsione di coda?

La ricorsione della coda è un tipo di chiamata al metodo di programmazione in cui un metodo chiama se stesso, quindi restituisce immediatamente il valore di quella seconda chiamata. In altre parole, la ricorsione in coda si verifica quando l’istruzione finale all’interno di un metodo è un’altra chiamata allo stesso metodo. I parametri nella seconda chiamata al metodo sono generalmente diversi da quelli della prima, ma ciò non è necessario. Affinché questa ricorsione funzioni, il metodo chiamato all’interno di se stesso deve restituire un valore concreto, come un numero, una stringa o un altro oggetto. I metodi void, che non restituiscono un valore, non funzionano bene per la ricorsione.

Il requisito che una chiamata ricorsiva debba essere l’ultima istruzione nel suo metodo chiamante non significa necessariamente che la chiamata ricorsiva sia l’ultima riga nel metodo. Una corretta chiamata di ricorsione in coda può essere trovata anche all’interno di una struttura di controllo, il che significa che, nel codice sorgente, la struttura di controllo può terminare il metodo anziché la chiamata. La distinzione importante in questo caso è che una struttura di controllo non è un’istruzione di programmazione, ma una parte incorporata del linguaggio del computer.

La ricorsione della coda esiste in molti linguaggi per computer, inclusi Java e C++. Spesso, queste chiamate ricorsive possono essere riscritte utilizzando altri mezzi, come i cicli for, i cicli while o le istruzioni goto. L’utilità della ricorsione si trova quando si creano molte chiamate sequenziali allo stesso metodo. La ricorsione è spesso il modo più semplice e pulito per eseguire attività ripetitive.

Un esempio comune di ricorsione in coda è un metodo che calcola il fattoriale di un numero. Questo processo è ideale perché, partendo da qualsiasi numero, ogni numero prima di esso viene moltiplicato insieme. Quindi, per trovare il fattoriale di 5, il processo corretto per farlo sarebbe moltiplicare 5*4*3*2*1. La ricorsione interviene a causa di come è strutturato il metodo fattoriale: se il fattoriale è 1, restituisce 1, altrimenti restituisce il fattoriale del numero dato al metodo meno uno. Questo metodo è utile anche perché può essere scritto in modo equivalente utilizzando entrambi i tipi di ricorsione di coda, con o senza un’istruzione di controllo attorno a una chiamata al metodo finale.

La ricorsione in coda è solo un esempio dei molteplici tipi di ricorsione. Il concetto in tutti i tipi di ricorsione è essenzialmente lo stesso, che in qualche modo un metodo chiama se stesso. Di questi tipi, la distinzione della ricorsione in coda è che il valore di una chiamata ricorsiva viene restituito immediatamente e non accade nient’altro nel metodo chiamante dopo quella chiamata.