Hatena::Groupjavascript

lnzntのJavaScript日記 このページをアンテナに追加 RSSフィード

2010年11月19日(金)

メモ化

| 11:22 | メモ化 - lnzntのJavaScript日記 を含むブックマーク はてなブックマーク - メモ化 - lnzntのJavaScript日記 メモ化 - lnzntのJavaScript日記 のブックマークコメント

メモ化とは前回の処理の結果をオブジェクトに記憶させておくテクニック。

以下はメモ化を一般化させた memoizer 関数の例。

var memoizer = function(memo, fundamental) {
    var shell = function (n) {
        var result = memo[n];
        if (typeof result != 'number') {
            result = fundamental(shell, n);
            memo[n] = result;
        }
        return result;
    };
    return shell;
};

// memoizer を使用した階乗計算の定義
var factorial = memoizer([1, 1], function (shell, n) {
    return n * shell(n - 1);
});

factorial(10);  // 3628800