la tail recursion ou récursion terminale, c'est un truc dont tu ne peux pas te passer et qui existe dans tout bon langage (par exemple Lua, Lisaac ...)
En gros ça te permet de faire de la récursivité sans exploser ta pile. Lorsque la dernère instruction de ta fonction est du style return appel_de_fonction(param ...), alors au lieu de rajouter un nouveau contexte sur la pile (et donc la faire grossir), le contexte de la fonction en cours est dépilé et le contexte de la fonction a appeler (appel_de_fonction) est empilé. Cela permet de ne pas faire grossir la pile pour rien. Après, la fonction appel_de_fonction retorunera directement à la fonction appelante sans passer par la fonction courante.
Mais ça ne marche pas avec ta dernière instruction du genre return appel_de_fonction(...) + 1 car après l'appel de appel_de_fonction, la fonction en cours doit faire une addition, et doit donc reprendre la main avant de retourner.
[^] # Re: sonntag
Posté par Mildred (site web personnel) . En réponse à la dépêche Lisaac 0.12 en GPL v3. Évalué à 2.
En gros ça te permet de faire de la récursivité sans exploser ta pile. Lorsque la dernère instruction de ta fonction est du style return appel_de_fonction(param ...), alors au lieu de rajouter un nouveau contexte sur la pile (et donc la faire grossir), le contexte de la fonction en cours est dépilé et le contexte de la fonction a appeler (appel_de_fonction) est empilé. Cela permet de ne pas faire grossir la pile pour rien. Après, la fonction appel_de_fonction retorunera directement à la fonction appelante sans passer par la fonction courante.
Mais ça ne marche pas avec ta dernière instruction du genre return appel_de_fonction(...) + 1 car après l'appel de appel_de_fonction, la fonction en cours doit faire une addition, et doit donc reprendre la main avant de retourner.