【发布时间】:2016-08-02 10:42:51
【问题描述】:
我正在尝试在 Scala 中创建一个函数,该函数接受一个 Integer 参数并返回斐波那契数的加法到给定的 fib。数字。我正在使用 Stream 来获取 fib。数字,然后向右折叠以添加它们。为什么会产生堆栈溢出,我该如何解决?
def fibonacci(n: Int): Long = {
lazy val f: Stream[Int] = 0 #:: 1 #:: (f.zip(f.tail)).map{t=>t._1 + t._2}.filter(_<=n)
f.foldRight(0)(_+_).toLong
}
例如,输入 5,我会期望 0 + 1 + 1 + 2 + 3 + 5 = 12
【问题讨论】:
-
显然你得到了一个永不终止的递归。
-
我遇到的最简洁的斐波那契流:
def fib: Stream[Int] = 0 #:: fib.scan(1)(_+_)