我有一个解决Project Euler Problem 2的 Haskell 解决方案,它适用于 400 万限制以及高达 10^100000 的限制,在我的机器上只需要几秒钟。
但是对于任何更大的值,例如 10^1000000,计算不会及时返回,如果有的话(尝试将其放置几分钟)。这里的限制因素是什么?
evenFibonacciSum :: Integer -> Integer
evenFibonacciSum limit =
foldl' (\t (_,b) -> t + b) 0 . takeWhile ((<=limit) . snd) . iterate doIteration $ (1,2) where
doIteration (a, b) = (twoAB - a, twoAB + b) where
twoAB = 2*(a + b)