【发布时间】:2011-06-14 16:54:28
【问题描述】:
为什么 Scala 编译器不应用尾调用优化,除非方法是 final 的?
例如,这个:
class C {
@tailrec def fact(n: Int, result: Int): Int =
if(n == 0)
result
else
fact(n - 1, n * result)
}
结果
错误:无法优化 @tailrec 注释方法:它既不是私有的也不是最终的,因此可以被覆盖
如果编译器在这种情况下应用TCO,究竟会出现什么问题?
【问题讨论】:
-
这个问题混淆了
TCO,可以安全地使用这种方法,而更严格的tailrec,因为方法可能不是自递归的,所以不能使用。跨度>
标签: scala tail-recursion tail-call-optimization