关于递归。

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}

 

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

  

转载于:https://www.cnblogs.com/0314dxj/p/11542222.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值