2010-07-20 3 views

Répondre

4

Il est possible de reproduire n'importe quel code récursif avec une implémentation itérative équivalente.

Cette question décrit ce assez bien: Is it possible to remove recursion from this function?

+1

C'est faux. Tout ce dont vous avez besoin est une pile. Entrer un appel récursif ajoute des données sur la pile, et quitter le supprime. – Scharron

+1

En effet, mais souvent vous aurez du code beaucoup moins élégant et plus difficile à comprendre que leur homologue récursif. – NullUserException

+0

Vous avez fondamentalement raison. C'était un chapitre entier dans un cours de programmation que j'ai suivi: convertir de récursif en itératif. –

1

Je suis d'accord avec James - tout code récursive peut théoriquement être mis en œuvre en utilisant une approche itérative. La méthode de pile décrite sur le lien référé est une option valide. L'alternative est que vous pouvez coder en dur à n profondeur, avec le risque évident de se limiter à ladite profondeur.

Sans en savoir plus sur l'environnement et les contraintes sous lesquelles vous essayez d'exécuter votre code de gestion JSON, il est difficile de dire quelle approche est la plus appropriée. Certaines choses à considérer:

  • Code récursif est généralement plus simple à suivre si vous pouvez gérer (et compatible avec 99% des exemples dans presque toutes les langues là-bas pour le traitement de JSON)
  • Code itératives en utilisant la profondeur fixe peut être "plus efficace" dans la mesure où il ne nécessite pas autant d'utilisation de la pile, mais ne s'adapte pas bien aux scénarios n -depth
  • Le code basé sur une pile peut gérer les scénarios n, mais peut ne pas être aussi intuitif pour les autres programmeurs

En outre, il est possible de linéariser une structure arborescente (que le graphe d'objet d'un JSON est implicitement, en supposant que seul un tableau peut avoir une racine virtuelle de "tableau"). Cela permet une approche de traitement flat-stream. Si vous allez plus loin et injectez des jetons artificiels tels que DOWN et UP, il peut être très lisible. C'est quelque chose qui arrive dans la conception de compilateur et l'analyse de la langue, mais peut-être utile en tant que concept ici.

Questions connexes