Как исправить мой поток Фибоначчи в Scala
Я определил функцию для возврата потока Фибоначчи следующим образом:
def fib:Stream[Int] = { Stream.cons(1, Stream.cons(2, (fib zip fib.tail) map {case (x, y) => println("%s + %s".format(x, y)); x + y})) }
Функции работают нормально, но выглядит неэффективно (см. Вывод ниже)
scala> fib take 5 foreach println 1 2 1 + 2 3 1 + 2 2 + 3 5 1 + 2 1 + 2 2 + 3 3 + 5 8
Итак, похоже, что функция вычисляет n-е число Фибоначчи с самого начала. Это правильно? Как бы вы это исправить?