我只是学习Ruby和编程。我正在制作一个二十一点程序作为我的第一个项目。我有一个方法start_game被调用来启动每一个新手。调用该方法,然后在手结束时再次调用自身。这是正确的方法吗?在我看来,每次调用方法时它都会无休止地分配内存。我不确定这是否是垃圾收集会处理的事情。我觉得可能有更好的方法来做到这一点,但无法弄明白。提前谢谢!
答案 0 :(得分:1)
像这样递归调用一个方法最终会导致堆栈溢出(如果有足够的牌,则不确定它有多大可能)。
除非,即尾调用优化可以防止这种情况发生。这是一种优化形式,可以应用于递归方法调用,其中递归调用始终是通过该方法的任何运行中的最后调用。这基本上将递归调用转换为循环,因此每次都不会最终添加到堆栈。
然而,根据这个question,你不能依赖Ruby中的尾调用优化。所以我会稍微重写你的代码,以便在一个循环中调用start_game
来测试某些条件以决定它是否应该继续。