递归算法以及简单应用

文章介绍了如何利用递归算法处理三层树形结构数据,当用户在考试场景中选择市级或区县级节点时,能获取所有下属学校的ID。数据结构包含市级、区县级和学校节点,通过递归遍历处理非叶子节点,收集叶子节点(学校)的ID。
摘要由CSDN通过智能技术生成

递归算法

递归算法,是通过重复将问题分解为同类的子问题而解决问题的方法,它的表现形式一般为函数的自调用。在某些时候,可以使用递归的方式替代循环。

说简单点,递归的本质就是函数在自身代码中不断地调用自身的一种行为。

当然,在这个循环调用的过程中我们一定要设置一个临界值,当满足条件时就停止递归,否则无限制的调用下去就形成了一个死循环。

user story

市考试院要组建一场全市范围的考试,全市范围内大概有一百到两百数量的学校,简单的select选择操作过于繁琐,这里需要通过选择区县的方法来默认选择区县下属的所有学校。

如下图所示,页面上是一个三层的树形结构,用户点击市级或者区县级节点时,我期望得到的数据是其下属所有学校的ID存放到一个数组中。
在这里插入图片描述
因为用户点击的这个节点有可能是市级节点,也有可能是区县级节点或者直接点击学校节点,所以这里就可以用递归算法来实现。

// 三层机构树的数据结构大概是这样的:
var data = {
			 title: '保定市',
		     key: '100',
		     children: [
				{
					title: '竞秀区',
					key: '1001',
					children: [
						{
							title: '竞秀一中',
							key: '10011',
							isLeaf: true // isLeaf字段是指示当前节点是否为最下层节点
						},
						{
							title: '竞秀三中',
							key: '10013',
							isLeaf: true
						}
					]
				},
				{
					title: '莲池区',
					key: '1002',
					children: [
						{
							title: '保定一中',
							key: '10021',
							isLeaf: true
						},
						{
							title: '莲池二中',
							key: '10022',
							isLeaf: true
						}
					]
				}
			]
		};
// 当前选中的学校ID数组
var selectedSchoolIds = [];

// 选中节点的响应事件,参数e是当前选中节点及其下属节点的数据
function getSchoolIds(e){
	if(e.isLeaf){
		// 当前节点的isLeaf的值为true时说明当前节点是一个学校节点,需要将其加入到选中列表
		this.selectSchoolIds.push(e.key); 
		// 并且学校节点没有子节点,可以直接借宿递归
		return;
	}
	else
	{
		// 当前节点没有isLeaf或者isLeaf的值为false,说明当前节点是市级或者区县级节点
		// 但是程序这时候还不能确定是市级还是区县级节点,所以在这里进行递归再进行一次判断
		e.children.foreach((c) => {
			this.getSchoolIds(c);
		})
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值