あなたがメモ化に求めるものは、コンパイラのメモ化オプションが提供するものと同じではないかもしれません。
関数がどのように使用されるかを知っているので、計算された最後の 10 個程度の個別の値をメモすることだけが有益であることを知っているかもしれません。
それより古い値を使用することは決してないため、最後の 2 つまたは 3 つの値をメモすることだけが意味があることを知っているかもしれません。(フィボナッチ数列が思い浮かびます。)
いくつかの実行では多くの値を生成し、他の実行ではほんのわずかしか生成しない場合があります。
メモ化された値の一部を「破棄」して、最初からやり直すことができます。(この方法で乱数ジェネレーターをメモ化したので、特定の構造を構築する一連の乱数を再生できましたが、構造の他のパラメーターが変更されていました。)
最適化としてのメモ化は、値の再計算よりもはるかに安価なメモ化された値の検索に依存します。これは、入力要求の順序に依存します。これはメモ化データベースに影響を与えます: スタック、可能なすべての入力値の配列 (非常に大きい可能性があります)、バケット ハッシュ、または B ツリーを使用しますか?
メモ化コンパイラは、「フリーサイズ」のメモ化を提供するか、多くの可能な選択肢と選択肢を制御するパラメータを提供する必要があります。ある時点で、ユーザーに自分のメモ化を要求することが誰にとっても簡単になります。