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

8
задан Michael 28 December 2011 в 09:14
поделиться