我想實現一個memoized斐波那契數字函數,我遇到了一個編譯錯誤,我不能理清。以下代碼是我迄今爲止的內容。斯卡拉遞歸關閉編譯錯誤
var fibs = Map.empty[Int, Int]
fibs += 0 -> 1
fibs += 1 -> 1
fibs += 2 -> 2
val fib = (n: Int) => {
if (fibs.contains(n)) return fibs.apply(n)
else{
// Error here
val result = fib(n - 1) + fib(n - 2)
fibs+= n -> result
return result
}
}
println(fib(100))
的錯誤是:
遞歸
fib
需要鍵入
我試圖進入返回類型在不同的地方封閉,但我似乎無法得到它上班。
聲明封閉像val fib = (n: Int): Int => {
會產生不同的編譯錯誤。
你能幫我解決這個編譯錯誤嗎?
聲明等'VAL FIB =封閉件(N:智力):INT => {'產生不同的編譯錯誤。 – jjnguy 2010-11-01 03:50:35
另外,感謝您的意見。 – jjnguy 2010-11-01 03:51:38
我給你了'def'語法。如果你想使用'val'來定義函數,你必須像通常那樣給它一個類型:'val fib:(Int => Int)=(n:Int)=> {...}' – 2010-11-01 03:55:26