我试图在Scala中创建一个函数,它接受一个Integer参数并返回给定fib的斐波那契数的加法。数。我正在使用Stream来获取虚拟。数字,然后向右折叠添加它们。为什么会产生堆栈溢出,我该如何解决?
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
答案 0 :(得分:4)
stackoverflow
由.filter(_<=n)
引起,filter
需要迭代0 #:: 1 #:: (f.zip(f.tail)).map{t=>t._1 + t._2}
生成的所有斐波纳契数字列表。
也许你想要:
0 #:: 1 #:: (f.zip(f.tail)).map{t=>t._1 + t._2}.takeWhile(_ <= n)
takeWhile 将直接返回匹配的谓词数字并中止以迭代其他数字。