Pas forcément. De nombreux langages, et notamment la plupart des langages fonctionnels (que tu sembles mépriser pour une raison qui m'échappe) supportent la récursion terminale (tail recursion), qui permet, pour peu que la fonction soit bien écrite, de réutiliser le même espace sur la pile que l'appel précédent. En quelque sorte, la récursion est automatiquement transformée en itération.
.NET supporte ça avec le modifieur
tail. en IL, qui n'est malheureusement pas utilisé par le compilateur C# (
mais on peut tricher). Par contre, même sans ce modifieur, le JIT 64-bits est capable de déterminer qu'une fonction est éligible à la récursion terminale, et le fait tout seul dans le code exécutable généré.
Partager