通用記憶函數

使用通用的記憶函數,可以處理有規率的數列,還能提高程序的執行效率

var memoizer = function(memo,formula){//memo爲記憶數組,formula爲數列算法的回調函數
	var recur = function(n){
		var result = memo[n];//取記憶數組元素
		if (typeof result !== 'number')//無元素
		{
			result = formula(recur,n);//執行回調算法,直到返回計算結果
			memo[n] = result;//保存結果到記憶數組
		}
		return result;//返回計算結果
	}
	return recur;//返回函數
}

//Fibonacci數列,前面相鄰兩項之和等於後一項的值
var fibonacci = memoizer([0,1],function(recur,n){
	return recur(n-1) + recur(n-2);//遞歸調用
});

//階乘
var factorial = memoizer([1,1],function(recur,n){
	return n * recur(n-1);//同上
});

手打,可能會有手誤.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章