Vous pouvez toujours transformer une fonction récursive dans un processus itératif? Oui, absolument, et la thèse de Church-Turing, il prouve si ma mémoire est bonne. En termes simples, il affirme que ce qui est calculable par une fonction récursive est calculable par un modèle itératif (comme la machine de Turing) et vice-versa. La thèse n'est pas de vous dire précisément comment faire la conversion, mais il ne dit que c'est certainement possible.
Dans de nombreux cas, la conversion d'une fonction récursive, c'est facile. Knuth propose plusieurs techniques dans "The Art of Computer Programming". Et souvent, une chose calculées récursivement peut être calculée par une approche totalement différente en moins de temps et d'espace. L'exemple le plus classique est la suite de Fibonacci ou des séquences de celle-ci. Vous avez sûrement rencontré ce problème dans votre degré de plan.
Sur le revers de cette pièce, on peut certainement imaginer un système de programmation tellement avancé que pour traiter une définition récursive d'une formule comme une invitation à memoize avant les résultats, offrant ainsi la vitesse d'avantages sans les tracas de dire à l'ordinateur exactement les étapes à suivre dans le calcul d'une formule avec une définition récursive. Dijkstra presque certainement imaginer un tel système. Il a passé un long moment à essayer de séparer la mise en œuvre de la sémantique d'un langage de programmation. Puis de nouveau, sa non-déterministe et le multitraitement de langages de programmation sont dans une ligue au-dessus de la pratique de programmeur professionnel.
En dernière analyse, de nombreuses fonctions sont tout simplement plus facile à comprendre, lire et écrire en forme récursive. Sauf si il y a une raison impérative, vous ne devriez probablement pas (manuellement) la conversion de ces fonctions à une explicitement algorithme itératif. Votre ordinateur va gérer ce travail correctement.
Je peux voir une raison impérieuse. Supposons que vous avez un prototype de système dans un super-langage de haut niveau comme [l'enfilage de l'amiante sous-vêtements] Scheme, Lisp, Haskell, OCaml, Perl, ou Pascal. Supposons que les conditions sont telles que vous avez besoin d'une mise en œuvre en C ou en Java. (Peut-être que c'est de la politique.) Ensuite, vous pouvez certainement avoir quelques fonctions écrites de manière récursive, mais qui, traduit littéralement, allait exploser votre système d'exécution. Par exemple, l'infini de la queue de la récursivité est possible dans le Schéma, mais le même langage provoque un problème pour les C environnements. Un autre exemple est l'utilisation de lexicalement fonctions imbriquées et statique de la portée, Pascal prend en charge, mais C n'est pas.
Dans ces circonstances, vous pouvez essayer de surmonter la résistance politique à la langue d'origine. Vous pourriez trouver vous-même de réimplanter Lisp mal, comme dans Greenspun (langue-dans-joue) dixième de la loi. Ou vous pourriez juste trouver une approche complètement différente de la solution. Mais dans tous les cas, il y a sûrement un moyen.