我不知道我做错了什么,或者它只是 Scala 编译器的一个属性 - 当我尝试编译这段代码时,我得到了提到的编译错误:
@tailrec
def shiftDown2(x: Int, bound: Int) {
val childOfX = chooseChild(x, bound)
for (child <- childOfX) {
swap(x, child)
shiftDown2(child, bound)
}
}
而以下代码编译没有问题:
@tailrec
def shiftDown(x: Int, bound: Int) {
val childOfX = chooseChild(x, bound)
if (childOfX.isDefined) {
swap(x, childOfX.get)
shiftDown(childOfX.get, bound)
}
}
我相信上面的代码片段在语义上是相同的,并且都应该使用尾递归。