欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 用記憶函數(shù)快速計(jì)算遞歸函數(shù)

 更新時(shí)間:2010年03月15日 20:01:36   作者:  
摘自《JavaScript: The Good Parts》,作為讀書(shū)筆記備用。對(duì)于追求執(zhí)行效率的朋友可以參考下。
如果有一個(gè) fibonacci 數(shù)列要計(jì)算:
復(fù)制代碼 代碼如下:

var fibonacci = function (n) {
return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
};

恐怕數(shù)字一大瀏覽器就會(huì)崩掉了,因?yàn)檫\(yùn)算過(guò)程中函數(shù)會(huì)有大量重復(fù)的計(jì)算。但 JavaScript 強(qiáng)大的數(shù)組和函數(shù)閉包可以輕松實(shí)現(xiàn)對(duì)已計(jì)算的結(jié)果記憶。運(yùn)算速度會(huì)有指數(shù)級(jí)的提高。

小而強(qiáng)大的記憶函數(shù):
復(fù)制代碼 代碼如下:

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;
};

第一個(gè)參數(shù)為初始記憶數(shù)列,第二個(gè)參數(shù)為基礎(chǔ)函數(shù)。用起來(lái)就更簡(jiǎn)單啦:
復(fù)制代碼 代碼如下:

var fibonacci = memoizer([0, 1], function (shell, n) {
return shell(n - 1) + shell(n - 2);
});

類(lèi)似的,如果要算 factorial 數(shù)列:
復(fù)制代碼 代碼如下:

var factorial = memoizer([1, 1], function (shell, n) {
return n * shell(n - 1);
});

相關(guān)文章

最新評(píng)論