使用通用的記憶函數,可以處理有規率的數列,還能提高程序的執行效率
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);//同上
});
手打,可能會有手誤.