为什么这个方法不能注释为@tailrec?

时间:2017-10-11 14:12:18

标签: scala

计算列表的总和:但是这个方法不能注释为@tailrec?

 def rec(a:List[Int]): Int ={

  def rechelper(a:List[Int],n:Int,res:Int) :Int={
    if (n==a.length) res 
    else  rechelper(a,n+1,res+a(n))  
  }
  rechelper(a,0,0)
}

1 个答案:

答案 0 :(得分:2)

你不能这样做,因为rec方法不是尾递归。 rechelper是尾递归方法,所以你可以这样做。

scala>  def rec(a:List[Int]): Int ={
     |    @tailrec
     |   def rechelper(a:List[Int],n:Int,res:Int) :Int={
     |     if (n==a.length) res 
     |     else  rechelper(a,n+1,res+a(n))  
     |   }
     |   rechelper(a,0,0)
     | }
rec: (a: List[Int])Int

scala>