原生js vue react通用的递归函数

news2024/9/27 17:21:56

c31bb4314f4144bbb11cf5a0a93bec2f.gif

 

🙂博主:锅盖哒
🙂文章核心:原生js vue react通用的递归函数

目录大纲

1.递归函数的由来

 2.代码逻辑


 

1.递归函数的由来

        递归函数的由来可以追溯到数学中的递归概念和数学归纳法。

        在数学中,递归是指通过定义基本情况和递推公式,将一个问题分解为更简单的、与原问题具有相同结构的子问题,并用子问题的解来构建原问题的解。递归的思想在解决一些数学问题时非常有用。

        当计算机科学发展起来后,人们将递归思想应用到程序设计中,形成了递归函数的概念。递归函数是一种能够调用自身的函数。 递归函数的使用可以有效地解决一些需要重复执行相似任务或处理具有递归结构的问题。

递归函数的设计通常包括两部分:

  1. 基本情况(边界条件):定义问题的最简单情况和对应的解,作为递归的终止条件。
  2. 递推公式(递归关系):描述问题和子问题之间的联系,通过递归调用函数本身来解决规模较小的子问题。

         递归函数的执行过程中,每次调用都会创建一个新的函数上下文(包括参数、局部变量等),并将其压入执行栈。递归函数通过不断调用自身,并处理更小规模的子问题,直到达到基本情况为止,然后逐步返回结果,并依次弹出执行栈中的上下文,完成整个递归过程。

递归函数在实际编程中有广泛的应用,例如树的遍历、图的搜索、排列组合、动态规划等领域。但需要注意的是,递归函数的设计要合理,避免无限递归或重复计算,以确保程序的正确性和效率。

 2.代码逻辑

假设下方的数据是我们从接口中获取到的


	
	    var temp = [
			{
				"id": 1,
				"pid": 0,
				"title": "一档",
				"money": "666.00"
			},
			{
				"id": 2,
				"pid": 0,
				"title": "二档",
				"money": "1900.00"
			},
			{
				"id": 3,
				"pid": 1,
				"title": "一档1级",
				"money": "1800.00"
			},
			{
				"id": 4,
				"pid": 0,
				"title": "三档",
				"money": "2000.00"
			},
			{
				"id": 5,
				"pid": 0,
				"title": "四档",
				"money": "2200.00"
			},
			{
				"id": 6,
				"pid": 5,
				"title": "四档1级",
				"money": "2200.00"
			},
			{
				"id": 7,
				"pid": 2,
				"title": "二档1级",
				"money": "3700.00"
			},
			{
				"id": 8,
				"pid": 4,
				"title": "三档1级",
				"money": "2000.00"
			},
			{
				"id": 10,
				"pid": 0,
				"title": "五档",
				"money": "250.00"
			},
			{
				"id": 12,
				"pid": 10,
				"title": "五档1级",
				"money": "10000.00"
			},
			{
				"id": 18,
				"pid": 1,
				"title": "一档2级",
				"money": "1800.00"
			},
			{
				"id": 21,
				"pid": 0,
				"title": "六档",
				"money": "0.00"
			},
			{
				"id": 24,
				"pid": 1,
				"title": "一档3级",
				"money": "1800.00"
			},
			{
				"id": 25,
				"pid": 2,
				"title": "二档2级",
				"money": "4100.00"
			},
			{
				"id": 26,
				"pid": 2,
				"title": "二档3级",
				"money": "4400.00"
			},
			{
				"id": 27,
				"pid": 4,
				"title": "三档2级",
				"money": "2000.00"
			},
			{
				"id": 28,
				"pid": 4,
				"title": "三档3级",
				"money": "2000.00"
			},
			{
				"id": 29,
				"pid": 5,
				"title": "四档2级",
				"money": "2200.00"
			},
			{
				"id": 30,
				"pid": 5,
				"title": "四档3级",
				"money": "2200.00"
			},
			{
				"id": 31,
				"pid": 2,
				"title": "1",
				"money": "4100.00"
			},
			{
				"id": 32,
				"pid": 2,
				"title": "3",
				"money": "4400.00"
			},
			{
				"id": 38,
				"pid": 0,
				"title": "八档",
				"money": "0.00"
			},
			{
				"id": 39,
				"pid": 10,
				"title": "轻微",
				"money": "100000000.00"
			},
			{
				"id": 44,
				"pid": 42,
				"title": "一级",
				"money": "12323.00"
			},
			{
				"id": 45,
				"pid": 42,
				"title": "二级",
				"money": "755.00"
			},
			{
				"id": 47,
				"pid": 42,
				"title": "三级",
				"money": "44444.00"
			},
			{
				"id": 49,
				"pid": 48,
				"title": "一级",
				"money": "21234.00"
			},
			{
				"id": 50,
				"pid": 42,
				"title": "三级",
				"money": "44444.00"
			},
			{
				"id": 52,
				"pid": 48,
				"title": "一级",
				"money": "21234.00"
			},
			{
				"id": 57,
				"pid": 53,
				"title": "一级",
				"money": "4332.00"
			},
			{
				"id": 61,
				"pid": 38,
				"title": "啊",
				"money": "50.00"
			},
			{
				"id": 62,
				"pid": 1,
				"title": "1231",
				"money": "1.00"
			},
			{
				"id": 63,
				"pid": 0,
				"title": "阿斯顿飞过",
				"money": "0.00"
			},
			{
				"id": 66,
				"pid": 1,
				"title": "1",
				"money": "23.00"
			},
			{
				"id": 67,
				"pid": 2,
				"title": "123",
				"money": "123.00"
			},
			{
				"id": 70,
				"pid": 2,
				"title": "123",
				"money": "123.00"
			},
			{
				"id": 71,
				"pid": 38,
				"title": "桀桀桀",
				"money": "0.00"
			},
			{
				"id": 72,
				"pid": 12,
				"title": "11",
				"money": "11.00"
			},
			{
				"id": 73,
				"pid": 12,
				"title": "11",
				"money": "11.00"
			},
			{
				"id": 77,
				"pid": 1,
				"title": "测试一下",
				"money": "10000000.00"
			},
			{
				"id": 78,
				"pid": 1,
				"title": "七龙珠1",
				"money": "999.00"
			},
			{
				"id": 79,
				"pid": 2,
				"title": "测试",
				"money": "100.00"
			},
			{
				"id": 80,
				"pid": 1,
				"title": "测试一下",
				"money": "10000000.00"
			},
			{
				"id": 81,
				"pid": 0,
				"title": "我编辑了一下",
				"money": "123123.00"
			},
			{
				"id": 94,
				"pid": 81,
				"title": "我添加了一下",
				"money": "4567.00"
			},
			{
				"id": 97,
				"pid": 96,
				"title": "测试",
				"money": "0.00"
			},
			{
				"id": 101,
				"pid": 100,
				"title": "神奇",
				"money": "1.00"
			},
			{
				"id": 102,
				"pid": 101,
				"title": "神奇_yi",
				"money": "1.00"
			},
			{
				"id": 103,
				"pid": 102,
				"title": "神奇_er",
				"money": "1.00"
			},
			{
				"id": 104,
				"pid": 96,
				"title": "测试",
				"money": "0.00"
			},
			{
				"id": 109,
				"pid": 105,
				"title": "测试",
				"money": "1.00"
			},
			{
				"id": 111,
				"pid": 103,
				"title": "1",
				"money": "1.00"
			},
			{
				"id": 112,
				"pid": 111,
				"title": "11",
				"money": "11.00"
			},
			{
				"id": 113,
				"pid": 112,
				"title": "111",
				"money": "111.00"
			},
			{
				"id": 114,
				"pid": 113,
				"title": "1112",
				"money": "1112.00"
			},
			{
				"id": 115,
				"pid": 114,
				"title": "11122",
				"money": "11122.00"
			},
			{
				"id": 116,
				"pid": 103,
				"title": "1",
				"money": "1.00"
			},
			{
				"id": 117,
				"pid": 4,
				"title": "1",
				"money": "1.00"
			},
			{
				"id": 118,
				"pid": 4,
				"title": "1",
				"money": "1.00"
			},
			{
				"id": 119,
				"pid": 2,
				"title": "",
				"money": "0.00"
			},
			{
				"id": 120,
				"pid": 2,
				"title": "",
				"money": "0.00"
			},
			{
				"id": 121,
				"pid": 4,
				"title": "nihao",
				"money": "789.00"
			},
			{
				"id": 122,
				"pid": 94,
				"title": "纳尼?",
				"money": "1111.00"
			},
			{
				"id": 123,
				"pid": 122,
				"title": "测试1",
				"money": "1111.00"
			},
			{
				"id": 124,
				"pid": 123,
				"title": "???",
				"money": "1111.00"
			},
			{
				"id": 125,
				"pid": 124,
				"title": "嗯?",
				"money": "1111.00"
			},
			{
				"id": 126,
				"pid": 125,
				"title": "怎么回事?",
				"money": "1111.00"
			},
			{
				"id": 127,
				"pid": 94,
				"title": "纳尼?",
				"money": "1111.00"
			},
			{
				"id": 128,
				"pid": 124,
				"title": "嗯?",
				"money": "1111.00"
			},
			{
				"id": 129,
				"pid": 125,
				"title": "吆西",
				"money": "123.00"
			},
			{
				"id": 130,
				"pid": 125,
				"title": "吆西",
				"money": "123.00"
			},
			{
				"id": 131,
				"pid": 130,
				"title": "123",
				"money": "123.00"
			},
			{
				"id": 132,
				"pid": 130,
				"title": "123",
				"money": "123.00"
			}
		]

将数据获取到进行处理

    //处理好的数据
    let res = getTree(temp,0,[]);
    console.log(res);//打印观察

    //处理数据方法
    function getTree(list,pid,data){
        //获取所有一级
        for(let item of list){
            if(item.pid == pid){
                data.push(item);
            }
        }
        //获取子级
        for(let i of data){
            i.children = [];
            getTree(list,i.id,i.children);//递归调用
            if(i.children.length == 0){
                delete i.children;
            }
        }

        return data;
    }

效果如下:

044a51aa69ee4e99882bb29e7573e22b.png

本篇博客结束谢谢观看,如有更好的意见请在评论区发出来讨论。

 

3841e1bddc2c48a4916722101e7d7482.gif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/805221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows切换php版本以及composer

前提 安装php8.2 安装Php7.4 下载 nts是非线程安全的,这里选择线程安全的,选择64位 解压缩 修改系统环境变量 修改为php-7的 cmd中输入php -v查看 找到composer存放路径C:\ProgramData\ComposerSetup\bin 将三个文件复制到php目录下 重启电脑…

flink采用thrift读取tablets一个天坑

原先的配置 [INFO] StarRocksSourceBeReader [open Scan params.mem_limit 8589934592 B] [INFO] StarRocksSourceBeReader [open Scan params.query-timeout-s 600 s] [INFO] StarRocksSourceBeReader [open Scan params.keep-alive-min 100 min] [INFO] StarRocksSourceBeRea…

中间件安全-CVE漏洞复现-Docker+Websphere+Jetty

中间件-Docker Docker容器是使用沙盒机制,是单独的系统,理论上是很安全的,通过利用某种手段,再结合执行POC或EXP,就可以返回一个宿主机的高权限Shell,并拿到宿主机的root权限,可以直接操作宿主机…

【图论】Prim算法

一.介绍 Prim算法是一种用于解决最小生成树问题的贪心算法。最小生成树问题是指在一个连通无向图中找到一个生成树,使得树中所有边的权重之和最小。 Prim算法的基本思想是从一个起始顶点开始,逐步扩展生成树,直到覆盖所有顶点。具体步骤如下…

【Ansible】

目录 一、Ansible简介二、ansible 环境安装部署1、管理端安装 ansible 三、ansible 命令行模块(重点)1.command 模块2.shell 模块3、cron 模块4.user 模块5.group 模块6.copy 模块(重…

后台管理系统中刷新业务功能的实现

实现 由于刷新业务涉及路由通信所以在store/pinia创建全局变量refresh state:()>{return{// 是否刷新refresh:false,}},在header组件中是为刷新按钮绑定点击实现并对refresh取反操作 <el-button type"default" click"refresh!refresh" icon"R…

LaTex使用技巧20:LaTex修改公式的编号和最后一行对齐

写论文发现公式编号的格式不对&#xff0c;要求是如果是多行的公式&#xff0c;公式编号和公式的最后一行对齐。 我原来使用的是{equation}环境。 \begin{equation} \begin{aligned} a&bc\\ &cd \end{aligned} \end{equation}公式的编号没有和最后一行对齐。 查了一…

No101.精选前端面试题,享受每天的挑战和学习(Promise)

文章目录 1. 解释什么是Promise&#xff0c;并简要说明它的作用和优势。2. Promise有几种状态&#xff1f;每种状态的含义是什么&#xff1f;3. 解释Promise链式调用&#xff08;chaining&#xff09;的作用和如何实现。4. 如何捕获和处理Promise链中的错误&#xff1f;5. 解释…

【2023.7.29】本文用于自己写文章时查看Markdown编辑器语法

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

【C语言学习——————动态内存管理】

文章目录 一、什么是动态内存管理二、动态内存函数的介绍 1.malloc函数的介绍2.calloc函数的介绍3.realloc函数的介绍三、free函数的介绍 一.什么是动态内存管理 我们知道数据都是在内存中进行储存的&#xff0c;但是如果我们需要调用内存&#xff0c;我们可以通过定义一个变量…

实现哈希表

一&#xff1a;什么是哈希表&#xff1f; 哈希表是一种常见的数据结构&#xff0c;它通过将键映射到值的方式来存储和组织数据。具体来说&#xff0c;哈希表使用哈希函数将每个键映射到一个索引&#xff08;在数组中的位置&#xff09;&#xff0c;然后将该键值对存储在该索引处…

IOS + Appium自动化教程

前言 项目闲置下来了&#xff0c;终于抽空有时间搞自动化了&#xff0c;看了下网上的教程基本通篇都是android自动化的介绍 &#xff0c;ios自动化方面的内容网上简介的少之可怜。由于本人对ios自动化也是第一次做&#xff0c;甚至对苹果电脑的使用都不太熟悉&#xff0c;花了大…

微信小程序,商城底部工具栏的实现

效果演示&#xff1a; 前提条件&#xff1a; 去阿里云矢量图标&#xff0c;下载8个图标&#xff0c;四个黑&#xff0c;四个红&#xff0c;如图&#xff1a; 新建文件夹icons&#xff0c;把图标放到该文件夹&#xff0c;然后把该文件夹移动到该项目的文件夹里面。如图所示 app…

vue3如何封装接口

&#x1f642;博主&#xff1a;锅盖哒 &#x1f642;文章核心&#xff1a;如何封装接口 目录 前言 1.首先&#xff0c;安装并导入axios库。你可以使用npm或yarn来安装&#xff1a; 2.创建一个api.js文件来管理接口封装&#xff1a; 3.在Vue组件中使用封装的接口&#xff1…

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境4

7、使用串口工具 &#xff08;1&#xff09;连接硬件 连接 Type C 线&#xff0c; 一端电脑一端开发板 查看设备是否已经正确识别&#xff1a; 在 Windows 下可以打开设备管理器来查看 如果没有发现设备&#xff0c; 需要确认有没有装驱动以及接触是否良好 &#xff08;2&a…

Ubuntu更改虚拟机网段(改成桥接模式无法连接网络)

因为工作需要&#xff0c;一开始在安装vmware和虚拟机时&#xff0c;是用的Nat网络。 现在需要修改虚拟机网段&#xff0c;把ip设置成和Windows端同一网段&#xff0c;我们就要去使用桥接模式。 环境&#xff1a; Windows10、Ubuntu20.04虚拟机编辑里打开虚拟网络编辑器&#…

安装Harbor

前言 Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器&#xff0c;虽然Docker官方也提供了公共的镜像仓库&#xff0c;但是从安全和效率等方面考虑&#xff0c;部署企业内部的私有环境Registry是非常必要的&#xff0c;Harbor和docker中央仓库的关系&#xff0c;…

第四章:Spring上

第四章&#xff1a;Spring上 4.1&#xff1a;Spring简介 Spring概述 官网地址&#xff1a;https://spring.io/。 Spring是最受欢迎的企业级的java应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用Spring框架来创建性能好、易于测试、可重用的代码。Spring框…

【多模态】18、ViLD | 通过对视觉和语言知识蒸馏来实现开集目标检测(ICLR2022)

文章目录 一、背景二、方法2.1 对新类别的定位 Localization2.2 使用 cropped regions 进行开放词汇检测2.3 ViLD 三、效果 论文&#xff1a;Open-vocabulary Object Detection via Vision and Language Knowledge Distillation 代码&#xff1a;https://github.com/tensorflo…

Verilog语法学习——LV10_使用函数实现数据大小端转换

LV10_使用函数实现数据大小端转换 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 描述 在数字芯片设计中&#xff0c;经常把实现特定功能的模块编写成函数&…