是否可以在不使用遞歸的情況下編寫JSON解析器?如果是這樣,你會建議什麼方法?是否可以在不使用遞歸的情況下編寫JSON解析器?
3
A
回答
4
它可能通過等價的迭代實現重現任何遞歸代碼。
這個問題介紹了這個相當不錯:Is it possible to remove recursion from this function?
1
我同意James - 任何遞歸代碼理論上可以使用迭代的方法來實現。在引用的鏈接上描述的堆棧方法是一個有效的選項。另一種方法是,您可以將其深度編碼爲n
,然後將其限制爲所述深度的明顯風險。
不知道更多關於您嘗試運行JSON處理代碼的環境和約束條件,很難說哪種方法最適合。有些事情要考慮:
- 遞歸代碼通常是簡單的跟隨,如果你可以管理(在幾乎任何語言與例99%兼容在那裏處理JSON)使用固定的深度可以
- 迭代代碼「效率更高」,因爲它不需要太多的堆棧使用,但不能很好地擴展到
n
深度場景 - 基於堆棧的代碼可以處理
n
深度場景,但可能不像其他場景那麼直觀程序員
此外,還可以對樹結構進行線性化(JSON的對象圖是隱含的,假定數組只能有一個「數組」的虛擬根)。這允許採用平坦流處理方法。如果您進一步注入人造代幣(如DOWN
和UP
),它可以非常清晰易讀。這是編譯器設計和語言分析中出現的問題,但這裏可能有助於理解。
相關問題
- 1. 是否可以在不使用頭文件的情況下編寫c程序
- 2. 如何在不遞歸的情況下編寫Max Heap代碼
- 3. 是否可以在不使用Rails的情況下使用FactoryGirl?
- 4. 是否可以爲以下情況編寫單個查詢?
- 5. 是否可以使用AWK編寫語言解析器?
- 6. 使用Jackson Json解析器遞歸解析json文件
- 7. 是否可以在不拖放的情況下使用Linq-SQL?
- 8. 有人可以解釋JSON解析器如何在根本不使用eval的情況下工作嗎?
- 9. 是否可以在不使用變量的情況下解壓元組?
- 10. 遞歸下降解析器
- 11. 是否可以在沒有SDK的情況下編寫Android應用程序?
- 12. 是否可以在不編譯CoffeeScript文件的情況下使用JSDoc?
- 13. 如何在不調用多次輸入的情況下編寫遞歸函數?
- 14. 是否可以在不禁用JavaScript的情況下禁用AJAX?
- 15. 如何編寫遞歸下降解析器?
- 16. 如何從頭開始編寫遞歸下降解析器?
- 17. 是否可以在沒有FOSUserBundle的情況下使用FOSCommentBundle?
- 18. 是否可以在沒有log4j的情況下使用perf4j?
- 19. 是否可以在沒有jQuery的情況下使用Materializecss?
- 20. 是否可以在沒有GMS的情況下使用Google API?
- 21. 是否可以在沒有IIS的情況下使用Silverlight RiaServices?
- 22. 是否可以在不使用boost的情況下在C++ 11中編寫這樣的代碼?
- 23. 如何在不遞歸的情況下編寫這個VBA程序
- 24. 是否可以在不編譯的情況下調用C#詞法/語法分析器?
- 25. 在不使用遞歸的情況下迭代父節點PHP
- 26. 使用EBNF或BNF編寫遞歸下降解析器會更容易嗎?
- 27. 在不知道索引的情況下在C#中解析json
- 28. 使用遞歸和循環解析JSON
- 29. 遞歸下降解析器EBNF在PHP
- 30. 是否可以在不使用RefreshToken的情況下使用Google Adwords API?
這是錯的。所有你需要的是一個堆棧。 進入遞歸調用是在棧上添加數據,然後離開將其刪除。 – Scharron 2010-07-20 15:27:02
事實上,通常情況下你會得到的代碼不如遞歸對應的代碼更優雅,也更難以理解。 – NullUserException 2010-07-20 15:28:08
你基本上是對的。這是我編程課程中的一整章:從遞歸轉換爲迭代。 – 2010-07-20 15:29:15