为什么堆栈溢出错误与此Scala代码?

时间:2015-01-12 13:01:00

标签: scala stack-overflow

我写了一些尴尬的Fibonacci实现只是为了测试Stream

def fibonacci(a : Int, b : Int) : Stream[Int] = Stream(a, b) ++ fibonacci(a + b, a + b * 2)

我知道这不是最好的实现,但无法弄清楚为什么会在任何调用时堆叠溢出,比如说fibonacci(0, 1) take(1)

感谢。

1 个答案:

答案 0 :(得分:2)

因为您立即强制评估递归fibonacci

换句话说,您需要创建一个延迟生成器,方法是使用continually等方法或尾部映射。 Scaladoc实际上有一个很好的例子来说明如何在这里创建一个斐波纳契流:http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream

相关问题