假设我定义了以下函数:
final def myFunc[T](list: List[T]): List[T] = list match {
case h :: t =>
h :: myFunc(t)
case _ =>
Nil
}
当我添加 tailrec 注释时,编译器给出以下错误:
无法优化@tailrec注释的方法myFunc:它包含一个
递归调用不在尾部位置:^Nil。
我很困惑 Nil 的声明如何可以是递归调用?
问题不在于Nil
但与h :: myFunc(t)
因为myFunc(t)
这不是最后一次通话。最后一个电话是给接线员的::
的结果myFunc(t)
。这就是为什么该函数不是尾递归的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)