J'essaie de faire la différence entre ces 2 stratégies récursives.
La définition qui m'a été donnée est la suivante:
Tail Récursion: Un appel est récursif de queue si rien ne doit être fait après le retour de l'appel, c'est-à-dire lorsque l'appel revient, la valeur retournée est immédiatement renvoyée par la fonction appelante
Head Récursion: Un appel est récursif-tête lorsque la première instruction de la fonction est l'appel récursif.
Dans head recursion
, l'appel récursif, quand il se produit, précède tout autre traitement dans la fonction (pensez-y en haut ou en tête de la fonction).
Dans tail recursion
, c'est le contraire: le traitement a lieu avant l'appel récursif. Le choix entre les deux styles récursifs peut sembler arbitraire, mais le choix peut faire toute la différence.
Une fonction avec un chemin d'accès avec un seul appel récursif au début du chemin utilise ce qu'on appelle la récursivité de tête. La fonction factorielle d'une exposition précédente utilise la récursivité de la tête. La première chose qu'il fait une fois qu'il détermine que la récursivité est nécessaire est de s'appeler avec le paramètre décrémenté. Une fonction avec un seul appel récursif à la fin d'un chemin utilise la récursivité de queue. Reportez-vous à cet article
Exemple de récursivité:
public void tail(int n) | public void head(int n)
{ | {
if(n == 1) | if(n == 0)
return; | return;
else | else
System.out.println(n); | head(n-1);
|
tail(n-1); | System.out.println(n);
} | }
Si l'appel récursif se produit à la fin d'une méthode, il est appelé tail recursion
. La récursivité de la queue est similar to a loop
. Le method executes all the statements before jumping into the next recursive call
.
Si l'appel récursif se produit au beginning of a method, it is called a head recursion
. Le method saves the state before jumping into the next recursive call
.