Scala中非尾递归递归的可用性如何?

时间:2014-07-08 11:30:35

标签: scala recursion tail-recursion

由于非尾递归递归调用使用像Java那样的堆栈帧,我厌倦做任何递归,让我们说超过1000次。因此,我会厌倦将它用于大多数事情。

人们实际上是否在Scala中使用非尾递归递归?如果是这样,我可以使用什么标准来确定它是否可以是非尾递归的?

此外,是否有计划在未来版本的Scala中删除此内存限制?

1 个答案:

答案 0 :(得分:3)

在不能使用单尾递归的情况下,例如因为需要在两个函数之间进行替换,已经描述了一种名为trampolining的机制。

关于这个主题的最新和彻底的讨论可以在RúnarBjarnason的论文Stackless Scala With Free Monads中找到。

就个人而言,如果你真的有这种情况,我会采用简单的方式并恢复到命令式的风格,例如,> 1K深度,例如使用可变集合构建器。