Я определил функцию для возврата потока Фибоначчи следующим образом:
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-е число Фибоначчи с самого начала. Это правильно? Как бы вы это исправить?