Une définition de fonction f est récursive terminale quand tout appel récursif est de la forme return f(...); ; autrement dit, la valeur retournée est directement la valeur obtenue par un appel récursif, sans qu'il n'y ait aucune opération sur cette valeur. Par exemple, l'appel récursif de la factorielle
return n*f(n-1);
n'est pas terminal, puisqu'il y a multiplication par n avant de retourner. Par contre, l'appel récursif dans
int f(int n, int a) {
if (n<=1) {
return a;
} else {
return f(n-1,n*a);
}
}
est terminal ; le paramètre a joue le rôle d'un accumulateur ;
l'évaluation de f(5,1) conduit à la suite d'appels
int fact_iter(int n) {
int a = 1;
while (n>1) {
a = n*a;
n = n-1;
}
return a;
}