08-递归

一、什么是递归函数

    <script>
        //递归函数:函数内部自己调用自己 这个函数就是递归函数
        var num = 1

        function fn() {
            console.log('调用');
            if (num == 3) {
                return; //递归里面必须加退出条件
            }
            num++
            fn()
        }
        fn()
    </script>

二、递归

    <script>
        //递归函数求阶乘
        function fn(num) {
            if (num == 1) {
                return 1;
            }
            return num * fn(num - 1);
        }
        console.log(fn(3));
    </script>

三、斐波那契数列

    <script>
        //利用递归函数求斐波那契数列(兔子序列) 1、1、2、3/5/8/13/21
        //用户输入一个数字n就可以求出这个对应的兔子序列值
        function fn(n) {
            if (n == 1 || n == 2) {
                return 1
            }
            return fn(n - 1) + fn(n - 2)
        }
        console.log(fn(6));
    </script>

四、利用递归遍历数据

    <script>
        var student = [{
                id: 1,
                name: '张三',
                school: [{
                    id: 12,
                    name: '清华'
                }, {
                    name: '北大'
                }]
            }, {
                id: 2,
                name: '李四'
            }]
            //输入id号 返回数据对象
            //1.利用forEach去遍历里面的每一个对象
        function getId(data, id) {
            data.forEach(function(item) {
                if (item.id == id) {
                    console.log(item);
                } else if (item.school && item.school.length > 0) { //取得里面的数组 并且数组不为0
                    getId(item.school, id)
                }
            })
        }
        getId(student, 12)
    </script>

五、浅拷贝

    <script>
        var obj = {
            id: 1,
            name: 'andy',
            msg: {
                age: 18
            }
        }
        var o = {}
            // for (var i in obj) {
            //     o[i] = obj[i]
            // }
            // console.log(o);
            // obj.msg.age = 19
            // console.log(o);
        console.log('-----------');
        //浅拷贝只是拷贝一层 更深层次对象级别的只拷贝引用
        Object.assign(o, obj)
        console.log(o);
    </script>

六、深拷贝

    <script>
        //深拷贝拷贝多层 每一级别的数据都会拷贝
        var obj = {
            id: 1,
            name: '张三',
            msg: {
                age: 18
            },
            color: ['pink', 'blue']
        }
        var o = {}

        //封装函数
        function deepCopy(newObj, oldObj) {
            for (var k in oldObj) {
                //判断我们的属性值属于哪种类型数据
                //1.获取属性值
                var item = oldObj[k]
                    //2.判断这个值是否为数组
                if (item instanceof Array) {
                    newObj[k] = []
                    deepCopy(newObj[k], item)
                } else if (item instanceof Object) { //判断是否为对象
                    newObj[k] = {}
                    deepCopy(newObj[k], item)
                } else { //属于简单类型
                    newObj[k] = item
                }
            }
        }
        deepCopy(o, obj)

        console.log(o);
        obj.msg.age = 20
        console.log(o);
    </script>
posted @ 2024-05-30 14:42  _你听得到  阅读(8)  评论(0)    收藏  举报