在最近的StackOverflow答案中,我提供了以下递归代码:
如果我添加
def retry[T](n: Int)(fn: => T): T = {
try {
fn
} catch {
case e if n > 1 =>
retry(n - 1)(fn)
}
}
如果我添加
@tailrec
注释,将会得到如下结果:
我已经能够编写一个尾递归替代方案,但我仍然想知道为什么这个方法没有被优化。为什么呢?无法优化@tailrec注释的retry方法:它包含一个不在尾部位置的递归调用。