我不知道我是否做錯了什麼,或者它只是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)
}
}
我相信,上面的代碼片段在語義上是相同且應與尾遞歸工作。
什麼是'chooseChild'和'swap'? – ghik
這與這個代碼是否實際上是尾遞歸的ghik無關。 –
@BasvandenBroek是的,但它會讓事情變得更加清晰。 – ghik