【发布时间】:2014-09-22 07:20:58
【问题描述】:
我正在通过尝试在 List[T] 上实现操作来自学 Scala。我刚刚实现了dropWhile,它让我想知道当递归调用出现在不同情况下时,尾递归优化是如何工作的。
def dropWhile[T](list: List[T])(predicate: T => Boolean): List[T] = list match {
case head :: tail if predicate(head) => dropWhile(tail)(predicate)
case _ => list
}
递归调用出现在第一种情况下重要吗?
【问题讨论】:
-
没有。没关系。
-
您可以通过将
@scala.annotation.tailrec放在定义前面来自己确认这一点——这不是必需的(即编译器可能会应用优化),但如果它使用注释进行编译,您就知道您的代码的编写方式可以应用优化。
标签: scala recursion stack-overflow tail-recursion