Haskell でProject Euler #14の解決にしばらく取り組んでいますが、何らかの理由でそれを機能させることができません。少し前にGroovyを使用して問題を解決しましたが、ここでも基本的に同じ方法を使用していると思います。しかし、プログラムは最初の 10,000 の長さを見つけるだけでも信じられないほど遅く実行され、その理由について今では本当に迷っています。メモ化を正しく使用していると思いますが、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]
ていましたが、メモリ不足エラーが発生し、実行が完了するまでに数秒かかりました。
このプログラムの問題点について誰かが私に洞察を与えることができれば、それは素晴らしいことです! 私は多くのことを試しましたが、行き詰まっており、手を必要としています。
ありがとう!