国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

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

2019-11-21 00:40:30
字體:
供稿:網(wǎng)友
如果有一個(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)算過程中函數(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ù)。用起來就更簡(jiǎn)單啦:
復(fù)制代碼 代碼如下:

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

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

var factorial = memoizer([1, 1], function (shell, n) {
return n * shell(n - 1);
});
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白朗县| 亚东县| 合江县| 汤阴县| 宜昌市| 上栗县| 宁波市| 新晃| 商南县| 扬中市| 陆川县| 南开区| 公主岭市| 正蓝旗| 新密市| 万荣县| 新沂市| 星子县| 东宁县| 亳州市| 唐海县| 北川| 盈江县| 商城县| 蓬溪县| 南皮县| 江门市| 墨脱县| 谢通门县| 高台县| 河东区| 普兰店市| 南城县| 革吉县| 高州市| 沽源县| 博白县| 霍城县| 绥滨县| 伊春市| 泰来县|