斐波拉契数列

<!DOCTYPE html>

<html>

    <head>

        <meta charset="utf-8">

        <title></title>

    </head>

    <body>

        <script>

            // js 递归

            // 递归就是函数自己调用自己,一点要有结束条件

            // 需求  从1+2+..5;  1+2+3+4+5=15

            function add(n){

                // 如果n是1直接返回(递归函数的结束条件)

                if(n==1){return 1};

                return n+add(n-1);

            }

            console.log(add(4))

            // alert(add(5)) //15

           

            // 01   5+add(4)

            // 02   5+4+add(3)

            // 03   5+4+3+add(2)

            // 04   5+4+3+2+add(1);

            // 05   5+4+3+2+1;

         

            // 需求  1*2*3*...10用递归如何写呢

           

            // 斐波拉契数列

            // 求斐波拉契第n为数的数列

            // 下一个数等于前面两个数之和,第0位和第1位返回的是1

            // 1,1,2,3,5,8,13,21,34,55,89

            function fib(n){

                // 如果是第0位返回1 如果是第1位返回1

                if(n==0||n==1){return 1}

                else{

                    // 如果其他位 返回 前面两个数的和

                    return fib(n-1)+fib(n-2);

                }

            }

            // alert(fib(41));

           

            // n = 2  return fib(1)+fib(0)

            // n = 2  return 1+1; = 2

           

            // n = 3  return fib(2) +fib(1)

            // n = 3  2+1  

           

            // n = 4  return fib(3)+fib(2)

            // n = 4  3+2

           

            function getFib(n){

                // 如果小于1返回1

                if(n<=1){

                    return 1

                }else{

                    // 做数组arr

                    var  arr = [1,1];

                    // 从第2位开始算

                    for(var i=2;i<=n;i++){

                        // 第n位数是前面两个数的和

                        arr.push(arr[i-1]+arr[i-2]);

                    }

                    // console.log(arr);

                    // 返回最后一个(删除并返回最后一个)

                    return arr.pop();

                }

               

            }

            // 50以上的数字 慎用,可能需要几分钟

            alert(getFib(45));

            // alert(fib(45))

           

        </script>

    </body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值