#Js篇:js里面递归的理解

定义:

递归是一种编程技术,它是指一个函数在其定义内部调用自身的过程。

特点:
  1. 一个问题可以分解为更小的问题用同样的方法解决;
  2. 分解后的子问题求解方式一样,不同的是数据规模变小;
  3. 存在递归终止条件
作用:
递归拼接树型结构
 const rootList = [
      { id: 1, parent: null, text: '菜单1' },
      { id: 11, parent: 1, text: '菜单1-1' },
      { id: 12, parent: 1, text: '菜单1-2' },
      { id: 2, parent: null, text: '菜单2' },
      { id: 21, parent: 2, text: '菜单2-1' },
      { id: 22, parent: 2, text: '菜单2-2' },
      { id: 3, parent: null, text: '菜单3' },
      { id: 31, parent: 3, text: '菜单3-1' }
    ]
    function getTreeList(rootList, id, list) {
      for (const item of rootList) {
        if (item.parent === id) {
          list.push(item)
        }
      }
      for (const x of list) {
        x.children = []
        getTreeList(rootList, x.id, x.children)
        if (x.children.length === 0) {
          delete x.children
        }
      }
      console.log('list: ', list);
    }
    let res = getTreeList(rootList, null, [])
    // 

在这里插入图片描述

求1-100的和
  function getSum100(num) {
      if (num === 1) {
        return 1
      } else {
        return num + getSum100(num - 1)
      }
    }
    let sum100 = getSum100(100)
    console.log('sum100: ', sum100);
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 递归是一种编程技巧,其中一个函数调用自身。在 JavaScript 中,递归方法可以用来解决复杂的问题,并使代码更简洁易读。 递归的基本模型包括以下几个步骤: 1. 定义递归终止条件:当递归达到一定的深度时,必须终止递归。 2. 分治:将问题分解为规模更小的子问题。 3. 调用自身:通过解决子问题来解决整个问题。 4. 记录结果:在递归的过程中,记录每一步的结果。 下面是一个简单的递归例子,计算阶乘: ``` function factorial(n) { if (n === 0) { return 1; } return n * factorial(n - 1); } ``` 在这个例子中,递归终止条件是 `n` 为 0,分治的子问题是计算 `n-1` 的阶乘,调用自身的方式是通过函数 `factorial` 调用,并将计算结果返回。 ### 回答2: 递归是一种在编程中常见的技巧,特别在JavaScript中,递归方法经常被用来解决问题。递归是指一个函数调用自身的过程。下面是关于JavaScript递归方法的一些重要信息: 1. 递归方法必须包含一个终止条件,否则函数将无限地调用自身。这个终止条件通常是某个特定条件的判断,一旦满足了该条件,递归将停止。 2. 递归方法必须能够将问题分解为更小的子问题,同时保持问题的解决方案是相同的。 3. 递归方法可以方便地解决一些复杂的问题,例如树和图的遍历,阶乘计算等。 4. 使用递归方法时需要小心,因为它可能会导致性能问题。递归过程中使用大量的函数调用,可能导致堆栈溢出。 5. 尽管递归方法可以让代码更简洁和易于理解,但在某些情况下,使用循环可能更高效和可维护。因此,在选择使用递归方法之前,需要仔细权衡。 总的来说,JavaScript递归方法是一种强大而灵活的编程技巧,可以解决各种问题。但在使用时需要注意终止条件和性能问题,以确保代码的正确性和效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值