javascript递归

逆变星云
• 阅读 3228

调用自身的函数称为递归函数

  • 缺点:递归占用的内存和资源比较多,同时难以实现和维护。

  • 优点:在处理DOM之类的树形结构数据时,非常适合用递归。

案例

数字 n 的阶乘通过乘以 1 2 3 *... n 进行计算
var f = function (x) {  
  if (x === 1) {  
    return 1
  } else {  
    return x * f(x - 1)
  }  
}

const result = f(n)
获取存在某个字段的节点
let new_array = []

function _getChilds(data){
  if(data.ObjType == "某个数"){
    new_array.push(data)
  }
  if(data.Childs && data.Childs.length > 0){
    getChilds(data.Childs)
  }
}

function getChilds(childData){
  for(let i = 0; i < childData.length; i++){
      _getChilds(childData[i])
  }
  // 或者
  // childData.map(item => _getChilds(item))
}
js递归实现数组转树结构
const jsonArr = [
  {name:'a',id:1,pid:0},
  {name:'b',id:2,pid:1},
  {name:'c',id:3,pid:1},
  {name:'d',id:4,pid:2},
  {name:'e',id:5,pid:2}
]

function fn(data, pid) { 
  let result = []
  let temp
  for (let i = 0; i < data.length; i++) { 
    if (data[i].pid == pid) { 
      let obj = {
        'name': data[i].name,
        'id': data[i].id
      }
      temp = fn(data, data[i].id)
      if (temp.length > 0) { 
        obj.children = temp
      } 
      result.push(obj)
    } 
  } 
  return result
}

//调用
const result = fn(jsonArr,0)
点赞
收藏
评论区
推荐文章
凯特林 凯特林
4年前
浅谈JS中的递归
一、递归递归(英语:Recursion)在数学与计算机科学中,是指在函数的定义中使用函数自身的方法在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解一般来说,递归需要有边界条件、递归前进阶段和递归返回阶段。当边界条件不满足时,递归前进;当边界条件满
郜小超 郜小超
5年前
实际开发过程中遇到的js方法
1.递归方法实现树形结构formatCompanyTree(data,id){constnewDatadata.filter(itemitem.pidid).map(item({...item,disabled:item.nodetype
徐小夕 徐小夕
5年前
如何优雅的使用javascript递归画一棵结构树
递归和尾递归简单的说,递归就是函数自己调用自己,它做为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的
Irene181 Irene181
4年前
一篇文章带你了解Python递归函数
一、什么是递归函数?在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。二、函数的递归调用原理实际上递归函数是在栈内存上递归执行的,每次递归执行一次就会耗费一些栈内存。栈内存的大小是限制递归深度的重要因素三、案例分析1.求阶乘计算阶乘n!1x2x3x…xn,可以用
Stella981 Stella981
4年前
Recursion in Java
RecursioninJava递归无出口publicclassRecursionExample1{publicstaticvoidp(){System.out.println("hello");p();}
Wesley13 Wesley13
4年前
C#计算行列式的值(加边法)
1.函数行列式的值等于其第一行各元素乘以各自对应的代数余子式之积的和。(注:本代码仅提供一种思路,并不代表最优解)///<summary///递归计算行列式的值///</summary///<paramname"matrix"矩阵</param///<returns</ret
Wesley13 Wesley13
4年前
PHP算法之判断是否是质数
<h3质数的定义</h3<blockquote质数又称素数。一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则称为合数。</blockquote<h3实现思路</h3<p循环所有可能的备选数字,然后和中间数以下且大于等于2的整数进行整除比较,如果能够被整数,则肯定不是质数,相反,就是质数。</p<h3第一种算
Stella981 Stella981
4年前
Python之函数递归与迭代
函数递归:  定义:程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量
Wesley13 Wesley13
4年前
JAVA学习入门篇_递归结构
递归结构递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。​利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。​递归结构包括两个部分:​1.定义递归头。解答:什么
小万哥 小万哥
2年前
Python 函数:定义、调用、参数、递归和 Lambda 函数详解
函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例pythondefmyfunction():print("Hellofromafunction")
小万哥 小万哥
1年前
C++ 递归与面向对象编程基础
C递归递归是一种使函数调用自身的技术。这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题。递归可能有点难以理解。理解其工作原理的最佳方法是通过实验来尝试。递归示例将两个数字相加很容易做到,但将一系列数字相加就更复杂了。在下面的示例中,
逆变星云
逆变星云
Lv1
十年无梦得还家,独立青峰野水涯。
文章
3
粉丝
0
获赞
0