我一直認爲讓你的代碼不易遵循而又可以避免的事情被認爲是不好的做法。遞歸似乎是這些事情之一(更不用說它可能會導致堆棧溢出等問題),所以當我們在編程課程中必須認真對待他們時,我感到有點驚訝(因爲它偶爾會導致更短的結果碼)。在我看來,這兩位教授之間也存在分歧......遞歸是一個不好的習慣嗎?
人們已經問過這種語言的具體情況(比如Python,其評論將其與goto
聲明相比較),主要針對某個問題,但我對一般感興趣:
遞歸在現代編程中是否被認爲是不好的實踐?我什麼時候應該避免它,並且在什麼情況下不能?
相關的問題,我發現:
Is recursion a feature in and of itself?(不討論究竟是好還是壞)
Is recursion ever faster than looping?(答案描述了遞歸可能導致功能性語言的改進,但價格昂貴的其他人) ,還有其他問題討論性能
如果這更適合理論計算機科學,隨時遷移。 – Neinstein
對於某些語言來說,並不是真正的意見。當選擇的工具鏈或VM可能不支持TCO時,簡單的遞歸函數應該由其他控制結構來實現。對於不能處於尾部位置的調用,這是一個可預測深度的問題,如'O(log n)'空間或可預測的小數據結構,以便可以使用簡潔的遞歸函數,然後選擇優先級,而不是使用實用程序回溯的解決方案堆棧堆棧不會增長系統堆棧,這會降低可讀性但更強大。 – Sylwester