首頁  >  文章  >  web前端  >  JavaScript趣題:斐波那契數列生成器

JavaScript趣題:斐波那契數列生成器

黄舟
黄舟原創
2017-01-22 14:54:311667瀏覽

建立一個函數產生器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)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn