最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript 用記憶函數快速計算遞歸函數

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

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

恐怕數字一大瀏覽器就會崩掉了,因為運算過程中函數會有大量重復的計算。但 JavaScript 強大的數組和函數閉包可以輕松實現對已計算的結果記憶。運算速度會有指數級的提高。

小而強大的記憶函數:
復制代碼 代碼如下:

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

第一個參數為初始記憶數列,第二個參數為基礎函數。用起來就更簡單啦:
復制代碼 代碼如下:

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

類似的,如果要算 factorial 數列:
復制代碼 代碼如下:

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

相關文章

  • javascript中的綁定與解綁函數應用示例

    javascript中的綁定與解綁函數應用示例

    本文為大家詳細介紹下javascript中綁定與解綁函數在Ie及Mozilla中的應用,感興趣的各位可以參考下哈,希望對大家有所幫助
    2013-06-06
  • knockoutjs動態(tài)加載外部的file作為component中的template數據源的實現方法

    knockoutjs動態(tài)加載外部的file作為component中的template數據源的實現方法

    Knockoutjs 的Components 是一種自定義的組件,它以一種強大、簡介的方式將你自己的ui代碼組織成一種單獨的、可重用的模塊。接下來通過本文給大家介紹knockoutjs動態(tài)加載外部的file作為component中的template數據源的實現方法,一起看看吧
    2016-09-09
  • 關于base64編碼和解碼的js工具函數

    關于base64編碼和解碼的js工具函數

    這篇文章主要介紹了關于base64編碼和解碼的js工具函數,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JavaScript宏任務(macrotask)和微任務(microtask) 執(zhí)行順序實例詳解

    JavaScript宏任務(macrotask)和微任務(microtask) 執(zhí)行順序實例詳解

    JavaScript是單線程指的是同一時間只能干一件事情,只有前面的事情執(zhí)行完,才能執(zhí)行后面的事情,這篇文章主要介紹了JavaScript宏任務(macrotask)和 微任務(microtask) 執(zhí)行順序,需要的朋友可以參考下
    2023-10-10
  • 手把手帶你入門微信小程序新框架Kbone的使用

    手把手帶你入門微信小程序新框架Kbone的使用

    這篇文章主要介紹了手把手帶你入門微信小程序新框架Kbone的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • JavaScript躲避行星游戲實現全程

    JavaScript躲避行星游戲實現全程

    本文將使用 canvas 創(chuàng)建一個躲避小行星游戲。另外將重點介紹的兩個方面是:如何使用 JavaScript 來檢測鍵盤輸入,以及如何在游戲中使用和處理 HTML5 音頻。希望你能夠喜歡
    2022-08-08
  • javascript實現10個球隨機運動、碰撞實例詳解

    javascript實現10個球隨機運動、碰撞實例詳解

    這篇文章主要介紹了javascript實現10個球隨機運動、碰撞的方法,實例分析了javascript實現小球碰撞的原理與實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • JS幻燈片可循環(huán)播放可平滑旋轉帶滾動導航(自寫)

    JS幻燈片可循環(huán)播放可平滑旋轉帶滾動導航(自寫)

    本文為大家介紹下實現JS幻燈片可循環(huán)播放帶滾動導航可平滑旋轉的全過程,效果還不錯,由需要的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • JavaScript監(jiān)聽鍵盤事件代碼實現

    JavaScript監(jiān)聽鍵盤事件代碼實現

    這篇文章主要介紹了JavaScript監(jiān)聽鍵盤事件代碼實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 淺談JavaScript 代碼整潔之道

    淺談JavaScript 代碼整潔之道

    這篇文章主要介紹了淺談JavaScript 代碼整潔之道,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論

电白县| 惠州市| 新泰市| 莱芜市| 松原市| 富源县| 利辛县| 香港| 祁门县| 平塘县| 贵港市| 禄劝| 伊金霍洛旗| 汕头市| 五家渠市| 金坛市| 黄冈市| 永福县| 塘沽区| 秦皇岛市| 满洲里市| 南宫市| 从江县| 元阳县| 荣昌县| 铁岭市| 福贡县| 烟台市| 胶南市| 义乌市| 碌曲县| 马龙县| 凉城县| 连州市| 锦州市| 陇西县| 靖西县| 长治市| 丁青县| 武川县| 偃师市|