我有一个针对Project Euler Problem 2的Haskell解决方案,它适用于四百万限制,以及最多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)
Run Code Online (Sandbox Code Playgroud) haskell ×1