为什么此 Scala 代码会出现堆栈溢出错误?
Why stack overflow error with this Scala code?
我写了一些笨拙的 Fibonacci 实现只是为了测试 Stream
def fibonacci(a : Int, b : Int) : Stream[Int] = Stream(a, b) ++ fibonacci(a + b, a + b * 2)
我知道这不是最好的实现,但无法弄清楚为什么这会在任何调用时堆栈溢出,比如说 fibonacci(0, 1) take(1)
?
谢谢。
因为您立即强制对递归 fibonacci
调用求值。
换句话说,您需要创建一个惰性生成器,或者使用 continually or by mapping on the tail. Scaladoc actually have a good example for how to create a fibonacci stream here: http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream
之类的方法
我写了一些笨拙的 Fibonacci 实现只是为了测试 Stream
def fibonacci(a : Int, b : Int) : Stream[Int] = Stream(a, b) ++ fibonacci(a + b, a + b * 2)
我知道这不是最好的实现,但无法弄清楚为什么这会在任何调用时堆栈溢出,比如说 fibonacci(0, 1) take(1)
?
谢谢。
因为您立即强制对递归 fibonacci
调用求值。
换句话说,您需要创建一个惰性生成器,或者使用 continually or by mapping on the tail. Scaladoc actually have a good example for how to create a fibonacci stream here: http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Stream
之类的方法