美文网首页
递归和深拷贝的总结运用

递归和深拷贝的总结运用

作者: sunny519111 | 来源:发表于2017-01-16 14:46 被阅读192次

递归

递归的思想就是相信一个函数可以做到这个事情,然后利用这个函数来推之前的值完成这个事情

利用递归求n阶层

阶层的公式n!=123……(n-1)*n;n=0时:0!=1

  1. 我们要相信fn(n)是可以求到n的阶层
  2. 然后看公式中n的阶层等于(n-1)的阶层乘以n
  3. 利用函数得到f(n-1)
        function strata(n){
            if(n==1||n==0){
                return 1;
            }
            else{
                return strata(n-1)*n;
            }
        }

利用递归求走楼梯的方法

题目如果有n个阶梯,你每次都一节或者二节,有多少种走法

  1. fn(n)可以得到走到n级楼梯的走法
  2. 会想到n之前的最近的走法
  3. 最后如果走一节,到(n-1)节的时候,有f(n-1)种走法
  4. 如果最后走二节,到(n-2)之前就有f(n-2)中走法
  5. 所以到n的时候,总共有f(n-1)+f(n-2)
        function go(n){
            if(n==1||n==2){
                return 1
            }
            else{
                return go(n-1)+go(n-2);
            }
        }

原生深拷贝的方法

要理解为什么需要用深拷贝

  1. 基本类型和引用类型
  2. 赋值的时候 引用类型只是赋值了地址,而基本类型是赋值了值
  3. 完全拷贝,改变了新的对象的值,不会影响到原对象

只传递一个参数

        function deepCopy(obj){
            var newobj = {};
            if(typeof obj === 'object'&& obj instanceof Array){
                var newobj=[];
            }
            for(var key in obj){
                if(typeof obj[key] === 'object'){
                    newobj[key]=deepCopy(obj[key])
                }
                else{
                newobj[key]=obj[key];
            }
            }
            return newobj;
        }

一个新的对象一个老对象

        function deepCopy2(oldobj,newobj){
            var newobj = newobj || {};
            for(var i in oldobj){
                if (typeof oldobj[i]==='object') {
                    if(oldobj[i].constructor==='Array'){
                        newobj[i]=[];
                    }
                    else{
                        newobj[i]={};
                    }
                    deepCopy2(oldobj[i],newobj[i]);
                }
                else{
                    newobj[i]=oldobj[i];
                }
            }
            return newobj;
        }

相关文章

网友评论

      本文标题:递归和深拷贝的总结运用

      本文链接:https://www.haomeiwen.com/subject/ayzubttx.html