Говоря о Project Euler Problem 2 , вы можете вместо рекурсии использовать Seq.unfold
, что очень идиоматично и дает вам все числа Фибоначчи одновременно:
let fibs = Seq.unfold (fun (current, next) ->
Some(current, (next, current + next))) (1,2)
Теперь fibs
представляет ленивую последовательность чисел Фибоначчи:
>fibs;;
val it : seq<int> = seq[1; 2; 3; 5; ...]
А чтобы сделать его из BigInteger
, просто замените (1,2)
на (1I,2I)
, хотя решение позволяет вам оставаться в пределах обычных целых чисел.