Обратите внимание, что вы часто можете использовать foldLeft
или foldRight
в таких ситуациях:
def fib(n: Int) = (1 to n).foldLeft((BigInt(0),BigInt(1)))((p,_)=>(p._2,p._1+p._2))._1
[Изменить]
Другим подходом было бы решение на основе итераторов:
def fib = Iterator.iterate((0,1)){case (x,y) => (y,x+y)}.map(_._1)
Это генерирует бесконечное количество чисел Фибоначчи, но вы можете просто взять из них столько, сколько хотите, например, fib.take(10).toList