我一直在使用Haskell解决Project Euler #14问题,但出现了问题,无法运行。之前我用Groovy解决过这个问题,我认为我在这里基本上使用了相同的方法。然而,即使只是找到前10000个长度,程序运行得非常慢,我真的很迷茫为什么会这样。我认为我正在正确地使用记忆化,但即使在GHCI中使用小型数据集,我也会耗尽内存。
我会运行
这是我目前想到的。
collatz = (map collatz' [0..] !!)
where collatz' n
| n == 1 = 1
| n `mod` 2 == 0 = 1 + collatz (n `div` 2)
| otherwise = 1 + collatz (3 * n + 1)
我会运行
map collatz [1..1000000]
来得到问题的答案,但是map collatz [1..10000]
会导致内存错误,并且需要运行很长时间才能完成。如果有人能给我一些关于这个程序问题的见解,那就太好了!我尝试了很多方法,但现在卡住了,需要帮助。谢谢!
1..10000
这个数据集时,我没有遇到内存溢出错误,但是运行时间仍然相同。当我使用数据集1..100000
时,我遇到了内存溢出错误,并且运行速度非常慢。 - Benjamin Kovachcollatz
可以变成collatz = integral collatz' where {- ... -}
。我可以在瞬间得到map collatz [1..10000]
的结果。 - Vitus