在scala中

时间:2015-09-23 22:21:03

标签: scala

我正在为一个类做一个赋值,我的函数应该返回一个斐波那契序列直到给定的位置。我试图在第三种情况下减少我的代码。

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

但我知道不行。任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

@Aivean给出的链接提供了一些实现Fibonacci流的好方法。然而,这个是我遇到的最简洁的。

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