【发布时间】:2015-10-28 00:22:54
【问题描述】:
我有以下递归函数,我想对其使用尾递归。但是编译器用这个错误抱怨我的实现:Error:(79, 7) could not optimize @tailrec annotated method loop: it contains a recursive call not in tail position
n match {
^
是不是因为for循环它假设它不在尾部位置?
def dsl[N,E](qNodes:QNodeLike[N,E]*) = {
val markers = scala.collection.mutable.Map.empty[String, N]
@tailrec
def loop(n:QNodeLike[N,E]):Unit = {
n match {
case QNode(head, kids:Seq[HalfEdgeLike[E,N]]) => {
for(kid <- kids){
kid match {
case EmptyHalfEdge() =>
case HalfEdge(e, n) => loop(n)
}
}
}
case QNodeMarker(head, marker, kids:Seq[HalfEdgeLike[E,N]]) => {
markers.update(marker,head)
for(kid <- kids){
kid match {
case EmptyHalfEdge() =>
case HalfEdge(e, n) => loop(n)
}
}
}
}
}
loop(qNodes.head)
}
【问题讨论】:
标签: scala recursion tail-recursion