并不是所有的尾递归都被优化的,在scala确实是这样的,所以scala中有一个注释来要求scala编译器务必尾递归优化,如果不行就报错,这个注释是
@tailrec
看看我们前面的两个例子
object DemoTest extends App {
def getSum2(list: List[Int]): Int = {
@tailrec
def sumHelp(list: List[Int], sum: Int): Int = {
if (list == Nil) sum
else sumHelp(list.tail, sum + list.head)
}
sumHelp(list, 0)
}
@tailrec
def getSum(list:List[Int]):Int = {
if(list == Nil) 0
else list.head + getSum(list.tail)
}
}
加上注解后头递归立即报错