我写了一些尴尬的Fibonacci实现只是为了测试Stream
def fibonacci(a : Int, b : Int) : Stream[Int] = Stream(a, b) ++ fibonacci(a + b, a + b * 2)
我知道这不是最好的实现,但无法弄清楚为什么会在任何调用时堆叠溢出,比如说fibonacci(0, 1) take(1)
?
感谢。
答案 0 :(得分:2)
因为您立即强制评估递归fibonacci
。
换句话说,您需要创建一个延迟生成器,方法是使用continually等方法或尾部映射。 Scaladoc实际上有一个很好的例子来说明如何在这里创建一个斐波纳契流:http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream