财客网
您的当前位置:首页JavaScript趣题:斐波那契数列生成器

JavaScript趣题:斐波那契数列生成器

来源:财客网


创建一个函数生成器genfib(),它可以返回一个函数,每执行一次这个函数就返回斐波那契数列中的下一项,第一次执行的时候返回第一项0。

例子如下:

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++); 
 } 
}
显示全文