js--斐波那契数列(兔子数列)

前言

斐波那契数列非常有意思,又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
既然这么有意思,那么我们就用JavaScript代码来实现以下这个有意思的例子吧!

内容

<script type="text/javascript">
    // 1  1  2  3  5  8  12 
    // 第n项是第n-1和n-2的和,开始的两项为1
        var count1 = 0;
    var fib1 = function(n) {
        count1++;
        if(n == 0 || n == 1) {
            return 1;
        }
        return fib1(n-1) + fib1(n-2);
    };  
    // fib1(11); // 287
    // fib1(12); // 465
    //fib1(13); // 753
    //alert(count1);    
    /*
    var foo1 = function() { };  
    var foo2 = (function() {
        // 闭包的位置
        var num = "幽灵";
        return function() {     
        };
    })();
    */
    var count2 = 0;
    var fib2 = (function() {
        var arr = [1,1]; // 斐波那契数列 
        return function(n) {
            count2++;
            /*
            if(arr[n]) {
                返回
            } else {
                递归
            }*/
            var res = arr[n];
            if(res) {
                return res;
            } else {
                arr[n] = fib2(n-1) + fib2(n-2);
                return arr[n];
            }
        };
    })();
    /*
    for(var i = 0; i < 10; i++) {
        alert(fib1(i) + ", " + fib2(i));
    }*/ 
    // fib1(11); // 287
    fib2(11); // 21
    // fib1(12); // 465
    fib2(12); // 24         
    fib2(8);
    //fib1(13); // 753
    //alert(count1);
    alert(count2);
</script>

总结

哈哈!想要完整的代码不?No,不给,就不给。自己想想剩下的代码。

end

谢谢您的阅读!

猜你喜欢

转载自blog.csdn.net/luojun13class/article/details/81092544