我已经编译了这个程序并尝试运行它。
import Data.List
import Data.Ord
import qualified Data.MemoCombinators as Memo
collatzLength :: Int -> Int
collatzLength = Memo.arrayRange (1, 1000000) collatzLength'
where
collatzLength' 1 = 1
collatzLength' n | odd n = 1 + collatzLength (3 * n + 1)
| even n = 1 + collatzLength (n `quot` 2)
main = print $ maximumBy (comparing fst) $ [(collatzLength n, n) | n <- [1..1000000]]
我从GHC得到了以下内容
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
我猜这是我听说的“空间溢出”之一。(我对Haskell还相当新。) 我该如何解决它?我需要重写collatzLength成尾递归吗?
ghc-7.0.4
编译并加上-O
选项时,它可以在我的电脑上正常工作。 - John LInt32
)时,会出现堆栈溢出。 - John L