Ejemplo de recursion lineal y de cola

Ejemplo de sumar los elementos de una lista

  def sumaR(l:List[Int]):Int = {  
    if (l.isEmpty) 0  
    else l.head + sumaR(l.tail)  
  }  

  @scala.annotation.tailrec  
  final def sumaL(l:List[Int], acc:Int = 0):Int = {  
    if (l.isEmpty) acc  
    else sumaL(l.tail, l.head+acc)  
  }  

}

En el primer caso el llamado requiere recordar los anteriores ejemplo sumaR(List(1,2,3,4,5)) -> 1 + SumaR(List(2,3,4,5))

En el caso de recursión de cola, el resultado se va acumulando sumaL(List(1,2,3,4,5),0) -> sumaL(List(2,3,4,5),1) --> sumaL(List(3,4,5),3)