Considérons l'exemple suivant
let rec compte_a_rebours n =
match n with
| 0 -> [0]
| n -> n :: (compte_a_rebours (n - 1))
# compte_a_rebours 10 ;;
- : int list = [10; 9; 8; 7; 6; 5; 4; 3; 2; 1; 0]
On notera au passage qu'en Python, il n'y a pas d'optimisation de la récursion terminale. Son auteur, Guido von Rossum s'en explique de manière argumentée ici.