2012-04-17 29 views
2

我只是在学习Ruby和一般的编程。我正在做一个二十一点计划,作为我的第一个项目。我有一个方法start_game被称为开始每一个新手。该方法被调用,然后在手结束时再次调用自己。这是做到这一点的正确方法吗?在我看来,每次调用方法时都会无休止地分配内存。我不确定这是垃圾回收处理与否。我觉得可能有更好的方法来做到这一点,但无法弄清楚。提前致谢!Ruby中的递归。我是否正确地做这件事?

+1

“我已经包含了start_game方法的代码。” - 不,你没有。 – 2012-04-17 09:00:55

+0

糟糕!忘了编辑出来。现在已经修复了。我觉得这不值得包括在内。 – Kevin 2012-04-17 09:35:35

+0

包含* some *代码几乎总是值得的 - 诀窍是能够包含相关位。如果你不确定我是否会在包括太多的方面犯错(但不要整个页面长的程序粘贴,例如,没有人会阅读它。) – Russell 2012-04-17 10:03:49

回答

1

像这样递归调用一个方法最终会导致堆栈溢出(如果有足够的手牌,不知道它有多可能)。

除非,即尾巴呼叫优化防止这种情况发生。这是一种可以应用于递归方法调用的优化形式,其中递归调用始终是通过该方法的任何运行中最后要调用的东西。这基本上是将递归调用转换为循环,所以你最终不会每次都添加到堆栈中。

但是,根据这个question,你不能依赖Ruby中的尾部优化。所以我会重写你的代码,所以start_game在一个循环中被调用,该循环测试一些条件以决定是否应该继续。

+0

谢谢罗素!我会试一试。 – Kevin 2012-04-17 09:36:51

+1

没问题!享受学习Ruby - 您选择了一门很好的语言来学习编程。 – Russell 2012-04-17 10:05:04

相关问题