调用方式,比如输出第二十项:
outputFibonacci(20);
实现思路:通过数组作为存储对象,利用闭包递归取得想要的项的值。思路比较简单,效率问题,还望大家指正。
function outputFibonacci(lenght){
return function Fibonacci(arrays,len){
if(typeof len!=='number'||len<=1){
document.write(len);
return;
}
if(arrays.length==0){
arrays[0]=0;
arrays[1]=1;
Fibonacci(arrays,len);
}
else if(arrays.length<=len){
arrays.push(arrays[arrays.length-1]+arrays[arrays.length-2]);
Fibonacci(arrays,len);
}
else{
document.write(arrays[len]);
}
}([],lenght);
}
稍作完善,参考《The Good Parts》 代码量简直天壤之别啊!!!
function outputFibonacci(n){
return n<2?n:outputFibonacci(n-1)+outputFibonacci(n-2)
}
然而如上的效率较低,再进行优化后
function outputFibonacci(n){
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;
}
调用方式略有不同
outputFibonacci()(20);