我有以下函数返回整数列表的元素之间的距离列表:
def dists(l: List[Int]) = {
//@annotation.tailrec
def recurse(from: Int, rest: List[Int]): List[Int] = rest match {
case Nil => Nil
case to :: tail => to - from :: recurse(to, tail)
}
l match {
case first :: second :: _ => recurse(first, l.tail)
case _ => Nil
}
}
尽管调用似乎处于尾部位置,但这::
阻止了我使用注释。@tailrec
recurse
是否有@tailrec
兼容的方式进行连接?
我可以使用累加器,但我必须反转输入或输出,对吗?
编辑:我对递归方法特别感兴趣。我的具体用例有点复杂,因为一次调用recurse
可以将多个项目添加到结果列表中:
=> item1 :: item2:: recurse(...)
距离函数只是演示问题的一个例子。