我只是在学习Ruby和一般的编程。我正在做一个二十一点计划,作为我的第一个项目。我有一个方法start_game被称为开始每一个新手。该方法被调用,然后在手结束时再次调用自己。这是做到这一点的正确方法吗?在我看来,每次调用方法时都会无休止地分配内存。我不确定这是垃圾回收处理与否。我觉得可能有更好的方法来做到这一点,但无法弄清楚。提前致谢!Ruby中的递归。我是否正确地做这件事?
2
A
回答
1
像这样递归调用一个方法最终会导致堆栈溢出(如果有足够的手牌,不知道它有多可能)。
除非,即尾巴呼叫优化防止这种情况发生。这是一种可以应用于递归方法调用的优化形式,其中递归调用始终是通过该方法的任何运行中最后要调用的东西。这基本上是将递归调用转换为循环,所以你最终不会每次都添加到堆栈中。
但是,根据这个question,你不能依赖Ruby中的尾部优化。所以我会重写你的代码,所以start_game
在一个循环中被调用,该循环测试一些条件以决定是否应该继续。
相关问题
- 1. 流利的NHibernate?我是否正确地做这件事?
- 2. Laraval has_many。我是否正确地做这件事?
- 3. Wordpress插件获取版本。我是否正确地做这件事?
- 4. 我是否递归地写这个?
- 5. 这是否有点过分,还是我做正确的事情?
- 6. 一个控制器与多个模型?我是否正确地做这件事?
- 7. 我是否正确地扩展了这个内置的ruby类?
- 8. 这是递归的正确使用吗?
- 9. 使用MouseEvents:我是否正确地做到了这一点?
- 10. 我是否正确地做了这个大O符号?
- 11. 这个递归的例子是否正确?
- 12. PHP中的ftp_connection,我可以递归地做事情吗?
- 13. 正确的方式做非递归使?
- 14. 这jQuery toggleClass行为似乎很奇怪,我正确地做这件事吗?
- 15. 河内塔非递归:我的代码是否正确?
- 16. 不是选择器(不知道我是否正确地做)
- 17. Ruby中的递归问题:我是否遇到副作用?
- 18. 我是否正确地评论了我的这条查询?
- 19. 这段代码是否是递归的?
- 20. 这个程序是否是递归的?
- 21. 这个语法是否是递归的?
- 22. 这些函数是否是递归的?
- 23. 这个实现是否是递归的
- 24. targetNamespace做什么?我是否正确?
- 25. 这是Ruby中的错误还是Ruby中的正确行为?
- 26. 我是否正确播种数据或做其他事情?
- 27. 我做了这个程序是否正确?
- 28. 我在做这个递归还是会被认为是迭代?
- 29. 这是否被认为是递归?
- 30. 在后台发送ping - 我是否正确地做?
“我已经包含了start_game方法的代码。” - 不,你没有。 – 2012-04-17 09:00:55
糟糕!忘了编辑出来。现在已经修复了。我觉得这不值得包括在内。 – Kevin 2012-04-17 09:35:35
包含* some *代码几乎总是值得的 - 诀窍是能够包含相关位。如果你不确定我是否会在包括太多的方面犯错(但不要整个页面长的程序粘贴,例如,没有人会阅读它。) – Russell 2012-04-17 10:03:49