2
的斯卡拉雙呼叫我試圖讓這個遞歸函數的工作:如何優化遞歸函數
@tailrec
def rec(n: BigInt): BigInt = {
if (n == 0) 0
else if (n == 1) 1
else (rec(n - 1) + rec(n - 2))
}
Error:(13, 24) could not optimize @tailrec annotated method rec: it contains a recursive call not in tail position else (rec(n - 1) + rec(n - 2))
這可怎麼優化,tailrec工作?
讓我補充一點,一般來說,尾遞歸(helper)方法將總是如下所示:def helper(r:Result,w:Work)其中Result和Work類型被選中以適合您的問題。在這種情況下,Result是BigInt,Work是(BigInt,BigInt)。顯然,你可以像盧卡那樣重新開展工作,但它並沒有改變基本的想法。如果你有一個快速返回的條件或者其他一些特殊的處理過程,它可能會變得更復雜一些,但通常它看起來像這樣。 – Phasmid