Project Euler Problem2

Haskellを使った方法

フィボナッチ数列の無限リストを作成する関数

fibgen :: Integer -> Integer -> [Integer]
fibgen a b = a : fibgen b (a + b)

上記の関数を使用して計算する

sum (filter even (takeWhile (<4000000) (fibgen 1 1)))

 参考URL
お気楽 Haskell プログラミング入門

 別の方法として、フィボナッチ数列から偶数を取り出した数列は

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