我更喜歡用迭代算法實現遞歸方法。在學習考試時,我使用隊列實現了遞歸BFS(廣度優先搜索),但是在線搜索使用隊列的遞歸BFS時,我一直在閱讀,BFS是迭代算法而不是遞歸算法。那麼是否有理由選擇一個呢?是否有任何理由選擇迭代算法而不是遞歸算法
1
A
回答
0
迭代和遞歸兩者都有相同的時間複雜度。差異是:遞歸程序需要更多的內存,因爲每次遞歸調用都會將程序狀態推入堆棧併發生堆棧溢出。但遞歸代碼易於編寫和管理。您可以減少通過使用tail recursion遞歸程序的空間複雜度。
+0
謝謝你,特別是對尾遞歸的附加信息。 –
0
迭代實現通常更快。斐波納契系列就是一個例子。在遞歸解決方案中通過簡單的循環實現它會更快。
更多的討論在這裏Recursion or Iteration?
2
迭代是計算機更高效。遞歸對程序員來說更高效,可能更優雅(可能)。
遞歸的問題是每次遞歸調用推動國家/幀到調用棧,可迅速導致資源深遞歸耗盡(堆棧溢出!)。但是,這些解決方案通常更易於編碼和閱讀。
迭代執行得更好,因爲它全部在本地框架中完成。然而,將遞歸轉換爲迭代可以降低由於引入變量以迎合算法進程而導致的可讀性。
選擇任何最容易編碼和維護的實現。只有擔心你是否有問題。
相關問題
- 1. 遞歸算法優於迭代算法的優點是什麼?
- 2. 是否可以使用迭代器實現遞歸算法?
- 3. 尾遞歸與迭代算法
- 4. 將遞歸算法轉換爲迭代
- 5. 等價於迭代算法的遞歸
- 6. 轉換遞歸算法,以迭代
- 7. 是否可以分發遞歸算法?
- 8. 將遞歸算法轉換爲迭代算法
- 9. 將遞歸算法轉換爲迭代算法的困難
- 10. 遞歸算法僞代碼
- 11. 是否有任何理由選擇開始學習Winforms而不是WPF?
- 12. 遞歸算法
- 13. 選擇算法是否穩定?
- 14. STL算法和迭代器,而不是「for」循環
- 15. 這是什麼遞歸算法
- 16. 是否有任何理由使用這個Regex方法而不是String.IsNullOrEmpty()?
- 17. 將遞歸差分算法轉換爲迭代算法的建議?
- 18. 如何將迭代算法轉換爲遞歸解決方案
- 19. 如何從遞歸算法轉換爲迭代
- 20. 遞歸算法樹
- 21. 尾遞歸算法歸併
- 22. C++:是否有任何理由使用uint64_t,而不是size_t
- 23. 是否有任何理由使用SGML而不是XML?
- 24. 是否有任何理由使用Apache HashCodeBuilder而不是Objects.hash?
- 25. 如何給遞歸算法
- 26. 不動點迭代算法
- 27. 算法:找到分而治之算法的遞歸方程
- 28. 算法的迭代
- 29. 是不是遞歸線性的斐波那契算法?
- 30. 是否有任何算法不依賴於n(輸入大小)?
stackoverflow。忍不住道:d – smac89
^lol.Yup,可以在一個痛苦的屁股。 –