1. 程式人生 > >js實現菲波那切數列的兩種常用方法

js實現菲波那切數列的兩種常用方法

res alert 定義 面向 div ret 如果 clas cti

菲波那切數列即:1 1 2 3 5 8......,後面的數字是前面兩個數字的和,並且第一個,第二個數字都是1,用js實現

的兩種方法,一種通過常用的遞歸調用,第二種不通過遞歸,而是通過強大的閉包實現。

1.遞歸實現

 // fab 1 1 2 3 5 8
            function fab(num) {
                if(num==1 || num==2){
                    return 1;
                }else{
                    return fab(num-1)+fab(num-2);
                }
            }
            alert(fab(
5))

2.閉包實現。閉包主要在於:1.模擬面向對象 封裝數據 2.保存數據,因為如果把i,j定義在函數外面,將成為全局變量,不安全,因為會被調用修改,而

用閉包可以很好的封裝數據,不用遞歸一樣可以實現同樣的功能,更常用。

 //閉包1.模擬面向對象  封裝數據2.保存數據
            var fib = (function () {
                var i = 1;
                var j = 1;
                return function (n) {
                    var res = j;
                    
for (var k = 3; k <= n; k++) { res = i + j; i = j; j = res; } return res; } })(); document.write(fib(5));

js實現菲波那切數列的兩種常用方法