我通过尝试在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
}
在第一种情况下出现递归调用是否重要?
答案 0 :(得分:0)
正如有些人在评论中所说,你可以将@tailrec
注释应用于你的函数,如果递归无法优化为循环,它将产生编译器错误。
递归调用无关紧要。重要的是,不需要堆栈帧保持分配等待来从递归调用返回。