【发布时间】:2013-03-19 15:19:15
【问题描述】:
我在 Scala 中写了一个这样的函数:
def isSorted[T](list : List[T])(compare : (T, T) => Boolean) : Boolean = {
list match {
case Nil => true
case x :: Nil => true
case x :: rest => !compare(rest.head, x) && isSorted(rest)(compare)
}
}
我很好奇编译器是否会优化递归调用。递归调用仅在前导比较成功的情况下发生。如果没有,有没有办法早点炸掉,还能实现尾递归优化?
【问题讨论】:
-
这就是
@annotation.tailrec的用途 -
酷。它似乎被优化了。谢谢!
-
要明确一点,
@tailrec并没有神奇地使方法尾递归,它使它不是尾递归的错误。
标签: scala tail-recursion short-circuiting