Question

appels de fonction sont manipulés par l'intermédiaire d'une structure de données en pile. Est-ce suffisant pour soutenir récursion?

Était-ce utile?

La solution

vu la pile du tout is le traitement spécial, le compilateur doit avoir lors de l'appui récursivité.

Dans les langages de programmation plus anciennes comme les premières versions de FORTRAN, l'environnement d'exécution n'a pas eu une pile de fonction et chaque fonction a exactement un enregistrement d'activation qui lui est réservé quelque part en mémoire. Cela signifiait que la récursivité n'a pas été possible, parce que si vous avez appelé une fonction récursive vous écraser son seul et unique enregistrement d'activation, perdre de vue le contexte de la façon dont vous êtes arrivé.

L'introduction de la pile de fonction est ce qui a permis la première récursion être effectivement exprimé dans un langage de programmation. Avant cela, les programmeurs utiliseraient récursion comme un outil pour résoudre un problème abstraitement, mais faudrait alors traduire ce code dans une logique itérative en raison de l'absence d'une pile d'appel.

Pour un langage de programmation pour la récursivité de soutien, il a besoin d'avoir un mécanisme pour maintenir dynamiquement la pile d'appels. Cela ne doit pas être dans une pile explicite; vous pourriez en théorie dynamiquement affecter tous les cadres de la pile et les enchaîner ensemble comme une liste chaînée. Cela peut être utile, par exemple, si vous voulez coroutines de soutien ou des fermetures et effectivement besoin de tenir sur les anciens enregistrements d'activation après le retour de la fonction afin que les données peuvent être stockées plus tard.

Hope this helps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top