由于非尾递归递归调用使用像Java那样的堆栈帧,我厌倦做任何递归,让我们说超过1000次。因此,我会厌倦将它用于大多数事情。
人们实际上是否在Scala中使用非尾递归递归?如果是这样,我可以使用什么标准来确定它是否可以是非尾递归的?
此外,是否有计划在未来版本的Scala中删除此内存限制?
答案 0 :(得分:3)
在不能使用单尾递归的情况下,例如因为需要在两个函数之间进行替换,已经描述了一种名为trampolining的机制。
关于这个主题的最新和彻底的讨论可以在RúnarBjarnason的论文Stackless Scala With Free Monads中找到。
就个人而言,如果你真的有这种情况,我会采用简单的方式并恢复到命令式的风格,例如,> 1K深度,例如使用可变集合构建器。