2

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

4

1 回答 1

1

像这样递归调用方法最终会导致堆栈溢出(如果玩了足够多的牌,不确定这种可能性有多大)。

除非,也就是说,尾调用优化可以防止这种情况发生。这是一种优化形式,可应用于递归方法调用,其中递归调用始终是在通过该方法的任何运行中要调用的最后一件事。这基本上将递归调用转换为循环,因此您最终不会每次都添加到堆栈中。

但是,根据这个问题,您不能依赖 Ruby 中的尾调用优化。所以我会稍微重写你的代码,所以start_game在一个循环中调用它来测试一些条件以确定它是否应该继续。

于 2012-04-17T09:08:39.757 回答