方法1
var fibonacci = function(n) {
return n<2?n:fibonacci(n-1)+fibonacci(n-2);
}
for(var i=0; i<=10; i++){
document.write(i+'>>'+fibonacci(i));
document.write('<br>');
}
方法2
var fibonacci = function() {
var memo = [0,1];
var fib = function(n){
var result = memo[n];
if(typeof result !== 'number'){
result = fib(n-1) + fib(n-2);
memo[n] = result;
}
return result;
}
return fib;
}()
document.write(fibonacci(10));
方法3
var memoizer = function(memo, fundamental) {
var shell = function(n) {
var result = memo[n];
if(typeof memo[n] !== '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);
});
var factorial = memoizer([1,1], function(shell, n){
return n*shell(n-1);
});
document.write('fibonacci'+fibonacci(9));
document.write('<br>');
document.write('factorial'+factorial(3));
其中方法1不建议使用
方法2和方法3类似都比方法1的效率高,方法3更通用