重複の可能性:
メモ化と末尾再帰を組み合わせる
したがって、以下は私が書いたコードであり、累積変数を使用して最適化された末尾呼び出しです。
let rec counter init count =
if init = 1 then count + 1 else
match init with
| Even value -> (counter (value/2) (1 + count))
| Odd value -> (counter ((3 * value) + 1) (count+1))
let SeqBuilder (initval:int) : int =
counter initval 0
これをどのようにメモしますか?メモ化しようとしたときに遭遇した問題は、再帰呼び出しがメモ化オブジェクトに移動する必要があるため、再帰オブジェクトが必要なことです。
それとももっと簡単で、私は経験が浅いだけですか?