對於一種純函式(即只要是同一種輸入就能得到唯一乙個相同的結果的函式),我們可以設定記憶函式來節約資源,當輸入的引數不變時,我們就可以採用快取的結果,當輸入引數有所變化時才重新計算。一種記憶函式如下所示:
function
memorize
(fn)
cachedarg = arg;
cachedresult = fn(arg);
return cachedresult;
};}
思想:通過閉包來快取計算引數以及結果,通過引數的變化與否來決定是否重新計算。
使用方式:將要記憶的純函式作為引數傳入memorize中新建乙個新的函式(即為記憶版的純函式),然後在新的函式中傳入原始函式需要計算的引數即可。
參考:
js遞迴 記憶函式 動態規劃
遞迴在處理某些問題,尤其在迴圈遍歷方面,常常可以用比較簡潔的 實現一些複雜的功能 但是由於它是呼叫自身,所以如果層級比較多,一是效能會比較差,其次容易出現棧溢位 對於這兩點通過新增乙個變數儲存中間結果可以部分提公升效能,但是還是有上限,尤其是呼叫萬級的次數,還是有棧溢位的風險 乙個例子 關於斐波那契...
JS 函式與物件 區別 記憶
定義函式 函式就是乙個功能的封裝體 第一種 普通方式 function 函式名 引數列表 第二種 構造方式 動態函式 var 函式名 new function 引數列表 函式體 第三種 直接量方式 var 函式名 function 引數列表 注意 1 只要使用函式的名稱就是對這個函式的呼叫。2 函式...
JS記憶優化 閉包
對於記憶模式的優化方面,在樹上看到的不錯的例子!節省了呼叫函式執行的時間 一般的遞迴函式的呼叫示例如下 function normaldigui for var i 0 i 5 i window.onload function 最後結果 下面是優化後的 記憶優化的示例,使用了閉包,節省了反覆執行同n...