Aller au contenu
uencoder

Tail Recursion

La récursivité terminale est une récursivité où l'appel récursif est la dernière opération de la fonction ; les compilateurs peuvent l'optimiser en boucle pour éviter le débordement de pile.

Objectif

Exprimer une logique de boucle par récursion sans faire croître la pile — un pilier des langages fonctionnels.

Mécanisme

Si l'appel récursif est en position terminale (dernière opération avant le retour), l'OTC le transforme en saut plutôt qu'en appel, en réutilisant la frame de pile. Cela exige un support du langage (obligatoire en Scheme/SML ; optionnel en mode strict JS selon la spécification, mais seul Safari/JavaScriptCore l'implémente). La récursion non terminale doit être réécrite avec un accumulateur.

Cas d’usage

  • Programmation fonctionnelle
  • Évitement du débordement de pile
  • Optimisation de la récursion

Termes associés

References