2015-09-23 33 views
0

我正在做一個類的賦值,我的函數應該返回一個斐波那契序列直到給定的位置。我試圖在第三種情況下減少我的代碼。scala在同一個實例上運行2個方法

object FibonacciSeries{ 

    def fibrec(pos: Int, list: List[Int] = List()):List[Int] = pos match { 
     case 0 => List(0) 
     case 1 => List(0,1) 
     case _ => { 
       var seq= fibrec(pos - 1 , list) 
       seq :+ seq.takeRight(2).sum 
     } 
    } 
} 

我想這樣做只能調用一次遞歸函數,也適合一行。我希望能做類似的事情。

fibrec(pos -1, list).takeRight(2).sum.append 

但我知道不會這樣做。任何幫助表示讚賞

+0

您可以考慮爲您的任務使用'Stream'。斐波那契數列是scala流的慣用應用:http://stackoverflow.com/questions/8659127/how-to-fix-my-fibonacci-stream-in-scala – Aivean

回答

2

@Aivean給出的鏈接提供了一些實現斐波那契流的好方法。然而,這個是我遇到的最簡潔的。

val fib: Stream[Int] = 0 #:: fib.scan(1)(_+_) 
相關問題