zoukankan      html  css  js  c++  java
  • 关于递归。

    1.什么是递归?

      所谓的递归就是自己调用自己,采取函数调用函数自身的方式工作。

      javascript中递归最典型的应用是求阶乘和波菲那契数列。

    2.举个栗子:求1+2+3...+n的和?

    • 利用for循环的方法计算出来:
    function sum(n) {
         var total = 0
         for (var i = 1; i <= n; i++) {
              total = total + i
          }
            return total
    }
     console.log(sum(3)); //得出6
    • 利用递归方法求:
    function sum1(n) {
      if (n === 1) { // 当n=1时,要给出终止条件
         return 1;
       }
       return sum1(n - 1) + n;
    }
     console.log(sum1(3)); // 6
            

      利用递归时,处理不当就会陷入死循环中。

    3.利用递归求波菲那契数列的结果。

      什么是波菲那契数列,菲波那切数列又称黄金分割数列,指斐波那契数列数列从第3项开始,每一项都等于前两项之和。,如:(1、1、2、3、5、8、13、21)。 

    function fb(n){
        if (n == 1 || n==2) { // 从第三项开始
            return 1
        }
            
        return fb(n-1)+fb(n-2)
     }
    console.log(fb(4)) //3

    4.利用递归实现深拷贝。

      var objCopy = function (obj) {
          if (typeof obj !== 'object') return;
           // // 根据obj的类型判断是新建一个数组还是对象
          var newObj = obj instanceof Array ? [] : {};
            for (var key in obj) {
               if (obj.hasOwnProperty(key)) {
                  newObj[key] = typeof obj[key] === 'object' ? objCopy(obj[key]) : obj[key];
                }
            }
            return newObj;
        }
        var sourObj = {
           a: 1,
           name: 'hello',
           b: 23
         }
         let targeObj = objCopy(sourObj, {});
         targeObj.a = 10;
         console.log(sourObj);  // {a: 1, name: "hello", b: 23}
         console.log(targeObj);  // {a: 10, name: "hello", b: 23}

    结:编写递归最主要的就是找出递归的公司和终止条件,不然很容易陷入死循环中,看似简单,但递归也有很多的弊端,谨慎使用。

      

  • 相关阅读:
    list 集合工具类
    Java获取当前系统时间的前N小时时间
    注意点
    小bug
    Linux常用命令
    MySql的执行计划
    【解决问题】引入.vmx文件后,xshell连接Could not connect to ‘192.168.211.132‘ (port 22): Connection failed
    星涛:javaEE学习路线一览
    Vue响应式原理
    Java操作Xml文件
  • 原文地址:https://www.cnblogs.com/0314dxj/p/11542222.html
Copyright © 2011-2022 走看看