• 递归


    递归求斐波那契数列:

        //1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
        function getFib(n){
            if(n==1 || n==2){
                return 1;
            }
            return getFib(n-1)+getFib(n-2);
        }
        console.log(getFib(1))  //1
        console.log(getFib(2))  //1
        console.log(getFib(3))  //2
        console.log(getFib(4))  //3
        console.log(getFib(9))  //34
        console.log(getFib(50)) //卡死

    原因是这样算比较浪费性能。

        let i=0; //计数
        function getFib(n){
            i++;
            if(n==1 || n==2){
                return 1;
            }
            return getFib(n-1)+getFib(n-2);
        }
        console.log(getFib(20))     //6765
        console.log(i)      //13529

    由此可见,求第20位的数字,浏览器计算了13529次。

    改进如下:

        let i=0,
            obj={};
        function getFib(n){
            i++;
            if(obj[n] != undefined){  // 如果obj里已经有这个数,那么直接返回这个数
                return obj[n];
            }else{  // 如果obj里没有这个数,则进行计算
                if(n==1 || n==2){
                    obj[n]=1;
                    return 1;
                }else{
                    obj[n]=getFib(n-1)+getFib(n-2);
                    return obj[n];
                }
            }
        }
        console.log(getFib(60)) // 1548008755920
        console.log(obj)
        console.log(i)  // 117

    递归求阶乘:

        function fn(n){
            if(n==1){
                return 1;
            }else{
                return fn(n-1)*n;
            }
        }
        console.log(fn(1))  //1
        console.log(fn(2))  //1*2
        console.log(fn(3))  //1*2*3
        console.log(fn(4))  //1*2*3*4
        console.log(fn(5))  //1*2*3*4*5
  • 相关阅读:
    php 无限极分类
    高德地图随笔
    安全随笔
    关于专线映射问题
    js小技巧总结
    php+ajax 文件上传
    去除数组中重复的元素
    关于ueditor插入不了动态地图
    vue.js 安装
    js轮播
  • 原文地址:https://www.cnblogs.com/wuqilang/p/11900995.html
Copyright © 2020-2023  润新知