【发布时间】:2012-09-03 14:30:29
【问题描述】:
我正在尝试通过构建(自定义)延续来对结构尾递归进行操作,但编译器不会接受我的代码是尾递归的。一旦我尝试声明一个在非尾位置引用递归函数的函数文字,即使我没有在这里调用该函数,它也会引发错误。以下是触发错误的一个经过大量提炼的虚拟示例:
import scala.annotation.tailrec
object Test extends App {
@tailrec
def tailrectest(i: Int): Int = i match {
case i if i > 0 => {
val x = () => tailrectest(10)
tailrectest(i - 1)
}
case 0 => 0
}
}
我明白了
could not optimize @tailrec annotated method tailrectest: it contains a recursive call not in tail position
指的是val x = () => tailrectest(10)这一行
【问题讨论】:
-
那么您是在使函数尾部递归时遇到问题,还是您在抱怨编译器没有进行详细的流分析来确定非尾部位置的调用实际上 i> 发生?
标签: scala functional-programming tail-recursion