我只是在學習Ruby和一般的編程。我正在做一個二十一點計劃,作爲我的第一個項目。我有一個方法start_game被稱爲開始每一個新手。該方法被調用,然後在手結束時再次調用自己。這是做到這一點的正確方法嗎?在我看來,每次調用方法時都會無休止地分配內存。我不確定這是垃圾回收處理與否。我覺得可能有更好的方法來做到這一點,但無法弄清楚。提前致謝!Ruby中的遞歸。我是否正確地做這件事?
2
A
回答
1
像這樣遞歸調用一個方法最終會導致堆棧溢出(如果有足夠的手牌,不知道它有多可能)。
除非,即尾巴呼叫優化防止這種情況發生。這是一種可以應用於遞歸方法調用的優化形式,其中遞歸調用始終是通過該方法的任何運行中最後要調用的東西。這基本上是將遞歸調用轉換爲循環,所以你最終不會每次都添加到堆棧中。
但是,根據這個question,你不能依賴Ruby中的尾部優化。所以我會重寫你的代碼,所以start_game
在一個循環中被調用,該循環測試一些條件以決定是否應該繼續。
相關問題
- 1. 流利的NHibernate?我是否正確地做這件事?
- 2. Wordpress插件獲取版本。我是否正確地做這件事?
- 3. 我是否遞歸地寫這個?
- 4. 這是否有點過分,還是我做正確的事情?
- 5. 一個控制器與多個模型?我是否正確地做這件事?
- 6. 我是否正確地擴展了這個內置的ruby類?
- 7. 這個遞歸的例子是否正確?
- 8. 正確的方式做非遞歸使?
- 9. PHP中的ftp_connection,我可以遞歸地做事情嗎?
- 10. 這jQuery toggleClass行爲似乎很奇怪,我正確地做這件事嗎?
- 11. 河內塔非遞歸:我的代碼是否正確?
- 12. 不是選擇器(不知道我是否正確地做)
- 13. 我是否正確地評論了我的這條查詢?
- 14. 這個實現是否是遞歸的
- 15. targetNamespace做什麼?我是否正確?
- 16. 這是Ruby中的錯誤還是Ruby中的正確行爲?
- 17. 我是否正確播種數據或做其他事情?
- 18. 我在做這個遞歸還是會被認爲是迭代?
- 19. 這是否被認爲是遞歸?
- 20. 在後臺發送ping - 我是否正確地做?
- 21. Ruby中的遞歸正則表達式
- 22. 確保我正確地做這個問題
- 23. python中的我的正則表達式沒有正確地遞歸
- 24. 我正確地認爲繼承是這三件事的結合嗎?
- 25. Java - 我是否正確地從這個文件中讀取文本?
- 26. 我是否理解正確地將參數傳遞給函數?
- 27. 我是否正確地完成了這個鏈表?questin?
- 28. 我是否正確地讀取了這條命令?
- 29. JavaScript原型繼承 - 這是做事的正確方式嗎?
- 30. 我是否正確地分組?
「我已經包含了start_game方法的代碼。」 - 不,你沒有。 – 2012-04-17 09:00:55
糟糕!忘了編輯出來。現在已經修復了。我覺得這不值得包括在內。 – Kevin 2012-04-17 09:35:35
包含* some *代碼幾乎總是值得的 - 訣竅是能夠包含相關位。如果你不確定我是否會在包括太多的方面犯錯(但不要整個頁面長的程序粘貼,例如,沒有人會閱讀它。) – Russell 2012-04-17 10:03:49