フィボナッチ数列は次のように再帰的に定義できる。F1 = 1, F2 = 1, Fn = Fn-1+Fn-2。
したがって、最初の12項は次のようになる。F1 = 1, F2 = 1, F3 = 2, F4 = 3, F5 = 5, F6 = 8, F7=13, F8 = 21, F9 = 34, F10 = 55, F11 = 89, F12 = 144。
12番目の項であるF12が3桁になる最初の項である。
初めて1000桁になる最初の項を求めよ。
問題2で定義したfibを使い、findIndexを用いて初めて1000桁になる数のインデッ クスを求める。ここでは必ず解が存在するがfindIndex関数はMaybeを返すので、 Maybeに対する処理をする関数maybeを使い、見つからなかったら0、見つかった らインデックスに+1をして返すという処理をする。リストのインデックスは0か ら始まっているので、これで解がもとまる。
euler025 = maybe 0 (+ 1) $ findIndex (>= 10 ^ (1000 - 1)) fib
