匹配中的 Scala 尾递归优化

标签 scala recursion stack-overflow tail-recursion

我正在通过尝试在 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/

相关文章:

scala - 有没有办法验证原始spark sql查询的语法?

r - Shiny (R) 中的自引用 react 变量

python - 如何在 “stack overflow error”之后自动重新运行python代码

c - ARM-gcc 堆栈使用文件为空

sql - 发生错误 : "Cannot call methods on nvarchar."

scala - 如何在使用 Play Framework 处理文件后立即删除文件

Scala Spark - 丢弃空键

java - 玩!框架。模板 "include"

python - 迭代算法到递归的转换

c++ - 递归幂