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