建立一個函數產生器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++); } }
以上就是 JavaScript趣題:斐波那契數列生成器的內容,更多相關內容請關注PHP中文網(www.php.cn)!