美文网首页
递归的学习! xxxxx

递归的学习! xxxxx

作者: 不敢大声说话的web小萌新 | 来源:发表于2019-05-16 22:12 被阅读0次

    递归学习

    1. 实现一个输入方法,fun(n) 打印n 直至到n = 0
      function fun(n){
       if(n===1){ return console.log(n) }
       console.log(n);
       fun(n-1);
      }
      
    1. 实现一个递加函数 fun(n),例如 n = 3 ; 1+2+3的结果
      function fun(n){
       if(n === 1){ return 1 }
       return n+fun(n-1);
      }
      
      //尾调优化   尾调-->
      //当函数执行时创建执行栈,上面的代码如果执行5计算的时候
      //那么call task 就会在同一个执行栈 分别调用5 生成 4 调用 4 生产 3 一直到调用到1 然后再返回执行
      //尾调优化就是解决压栈问题 - 让他自身再一个内执行,返回一个函数,不是表达式
      
      function fn(n,total){
       if(n === 1){ return total };
       return fun(n-1,n + total);   
      }
      
      //我们可以做一个console.time()  console.timeEnd() 来测试优化
      
      console.time();
      fun(1000);
      console.timeEnd();
      // default: 0.175048828125ms
      
      console.time();
      fn(1000,1);
      console.timeEnd();
      // default: 0.0498046875ms
      //从这我们看到优化后反而运行时间还会边长,这里我们可以理解到创建执行栈是要消耗时间的
      
      console.time();
      fun(10000);
      console.timeEnd();
      // default: 1.386962890625ms
      
      console.time();
      fn(10000);
      console.timeEnd();
      // default: 0.467041015625ms
      // 从数量上看就可以看出内粗站溢出导致执行复杂度提高!
      
      
    1. 实现一个递乘函数fun(n),例如 n = 3 ; 1 x 2 x 3的结果
      function fun(n){
       if(n === 1){ return 1 }
       return n*fun(n-1);
      }
      
    1. 实现一个阶乘函数fun(x,n),得出x的n次方是的结果
      function fun(x,n){
       if(n===1){ return x }
       return x*fun(x,n-1);
      }
      
    1. 用递归实现一个汉诺塔,fun(n, a, b, c) ,

      什么是汉诺塔 =》 汉诺塔又三根柱子 A ,B ,C A柱子上分别有n个从小到大的圆盘,然后每次只能取一个圆盘,怎么让C柱子跟A柱子一样从小到排列。 B为辅助柱

      function fun(n,a,b,c){
       if(n === 1){ 
              console.log(a + '-->' + c)
          }else{
           fun(n-1,a,c,b);
              console.log(a + '-->' + c);
              fun(n-1,b,a,c);
       }
      }
      

    开发时碰见参数数据加密格式必须无限层排序,于是写了一个对象递归!

       function sortObjKey(obj) {
             let newObj = {};
             Object.keys(obj).sort().forEach(item => {
                 if (typeof obj[item] === 'object') {
                     if (Array.isArray(obj[item])) {
                         obj[item].forEach(it => {
                             it = sortObjKey(it);
                         })
                     } else {
                         obj[item] = sortObjKey(obj[item]);
                     }
                 }
                 newObj[item] = obj[item];
             })
             return newObj
         }
         console.log(sortObjKey(obj),'???');
    

    相关文章

      网友评论

          本文标题:递归的学习! xxxxx

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