Project Euler Problem2
Haskellを使った方法
フィボナッチ数列の無限リストを作成する関数
fibgen :: Integer -> Integer -> [Integer]
fibgen a b = a : fibgen b (a + b)
上記の関数を使用して計算する
sum (filter even (takeWhile (<4000000) (fibgen 1 1)))
別の方法として、フィボナッチ数列から偶数を取り出した数列は
2, 8, 34, 144, 610, ...
であり、n番目の項をa(n)とすると
a(n) = a(n-2) + a(n-1) * 4 (ただし、n>=3)
であるようなので、下記のようにして計算できる。
fibevengen :: Integer -> Integer -> [Integer]
fibevengen a b = a : fibevengen b (a + b * 4)
sum $ takeWhile (<4000000) $ fibevengen 2 8