我正在通过尝试在 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
}
递归调用出现在第一种情况下重要吗?
最佳答案
正如有人在评论中所说,您可以将 @tailrec
注释应用于您的函数,如果递归不能优化为循环,它将给出编译器错误。
递归调用在哪里并不重要。重要的是,不需要堆栈帧保持分配等待以等待递归调用的返回。
关于匹配中的 Scala 尾递归优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040402/