Le programme va utiliser une zone mémoire qui lui est réservé la pile d’exécution ou stack en anglais. Quand il va lire factorielle (n-1) il va empiler dans cette zone l'adresse de retour de la fonction courante et puis appeler factorielle (n-1) et ainsi de suite jusqu'à ce qu'il renvoie 1. A ce moment là il va dépiler l'adresse de retour de la fonction précédente, multiplier le résultat, puis dépiler l'adresse précédente etc. Jusqu'à la première factorielle.
On voit que si la récursivité est trop grande il y a un risque de sur-remplir la pile ce qui ferait planter le programme. Une autre façon de faire c'est la récursivité terminale. Par exemple ici la fonction factorielle récursive terminale : à chaque appel il n'y a pas besoin d'empiler l'adresser de retour car il n'y a plus rien à calculer dans la fonction courante.
int factorielle(int n, int a)
{
return (n == 0) ? a : factorielle(n-1,a*n);
}