Как исправить мой поток Фибоначчи в 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-е число Фибоначчи с самого начала. Это правильно? Как бы вы это исправить?

Ответы на вопрос(2)

Ваш ответ на вопрос