Scala:折叠斐波那契数流
Scala: folding on Stream of fibonacci numbers
我正在尝试在 Scala 中创建一个函数,该函数接受一个 Integer 参数和 returns 将斐波那契数加到给定的 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
Whosebug
是由.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 将 return 直接匹配谓词数字并中止以迭代其他数字。
我正在尝试在 Scala 中创建一个函数,该函数接受一个 Integer 参数和 returns 将斐波那契数加到给定的 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
Whosebug
是由.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 将 return 直接匹配谓词数字并中止以迭代其他数字。