例子如下:
var fib = genfib(); fib(); // -> returns 0 fib(); // -> returns 1 fib(); // -> returns 1 fib(); // -> returns 2
拿到这个题目,我第一感觉便是在genfib()里面做文章,因为它要返回一个函数,所以在里面先return一个闭包函数,甭管里面有些啥。
然后,根据题意,咋们在genfib()里面定义一个求第N项斐波那契数列的内部函数,在这里我是用的分治递归。
那怎么结合闭包函数和这个私有函数,来达到每一次执行都返回下一项斐波那契数列的效果呢?
可以用一个内部指针变量point,它开始指向0,每次调用闭包函数的时候,我们就执行私有函数,将指针变量作为参数传进去,返回当前项的斐波那契数,然后指针变量自增。
这样就达到了目的。
function genfib(){
var point = 0;
var getFib = function(num){
if(num == 0){
return 0;
}
if(num == 1){
return 1;
}
return getFib(num-1) + getFib(num-2);
};
return function fib(){
return getFib(point++);
}
}