Est-il possible d'écrire l'analyseur JSON sans utiliser la récursivité? Si c'est le cas, quelle approche suggéreriez-vous?Est-il possible d'écrire l'analyseur JSON sans utiliser la récursivité?
Répondre
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?
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.
- 1. Comment utiliser le théorème Master pour décrire la récursivité?
- 2. Réécriture d'une fonction récursive sans utiliser la récursivité
- 3. Inverser une liste unidirectionnelle avec et sans utiliser la récursivité
- 4. Puis-je publier JSON sans utiliser AJAX?
- 5. Éviter la récursivité
- 6. La récursivité est-elle possible dans une fonction statique?
- 7. Sans utiliser la récursivité, comment une exception de dépassement de pile peut-elle être levée?
- 8. En Delphi: Comment trouver la profondeur de récursivité sans utiliser de paramètre?
- 9. différence entre la récursivité structurelle et la récursivité accumulative
- 10. Récursivité, Arraylist
- 11. Décrire la structure du tableau
- 12. Résoudre le problème de récursivité sans fin du php
- 13. Impression imbriquée JSON sans utiliser des noms de variables
- 14. formage dynamiquement une Traversion objet JSON sans utiliser eval
- 15. Comment obtenir des informations de colonne de la table Oracle que vous ne possédez pas (sans utiliser décrire)?
- 16. Aide sur la récursivité d'arborescence
- 17. : La récursivité du modèle échoue
- 18. Création d'un vecteur spécifique sans boucle ni récursivité dans R
- 19. Est-il possible d'utiliser le SDK Android sans utiliser eclipse?
- 20. Comment implémenter singleton sans utiliser statique/variable globale? Possible?
- 21. Quel mot utilisez-vous pour décrire un objet de type JSON?
- 22. Pouvez-vous décrire la fonction PHP suivante?
- 23. Aide en utilisant la récursivité en Java
- 24. décodage JSON sans chaque fonction
- 25. Analyse json, clé sans guillemets
- 26. C# Désérialisation Json tableau sans []
- 27. Analyse JSON sans les guillemets
- 28. Perl récursivité aide
- 29. En quoi la récursivité primitive diffère-t-elle de la récursivité "normale"?
- 30. Json Jackson désérialisation sans classes intérieures
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
En effet, mais souvent vous aurez du code beaucoup moins élégant et plus difficile à comprendre que leur homologue récursif. – NullUserException
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. –