递归数据冗余,坑!!!

该博客介绍了如何在Java中实现父子级递归查询,以获取用户的所有下级信息。通过定义一个UserService并实现递归方法,从数据库中查询并累计所有子级用户。此外,还展示了一个简单的整数递归计算示例,用于求解100以内正整数之和。在实际应用中,注意避免递归调用导致的冗余,并提供清理方法以重置全局变量。
摘要由CSDN通过智能技术生成

1.场景:数据库用户存在父子级关系

2.需求:查询用户所有下级信息

public class DemoService implement userService{ 
	//用户所有下级集合
    List<User> allUserList = new ArrayList<>();
	    /**
	     * 递归查询所有下级
	     * @param uid 用户id
	     */
	    @Override
	    public List<YxUser> getAllDtSpread(int uid) {
	 	   /*
	 	   import com.baomidou.mybatisplus.core.mapper.BaseMapper;
	    	   *这里mapper继承了mybatisplus的BaseMapper 
	    	   *userMapper extends BaseMapper<User>
	    	   */
	    	   //条件查询,查询父级id为传入用户id的用户集合
	        QueryWrapper<User> wrapper = new QueryWrapper<>();
	        wrapper.eq("father_id",uid);
	        //累计父级到全局集合中
	        List<User> userList = userMapper.selectList(wrapper);
	        allUserList.addAll(userList);
	        if(userList!=null && userList.size()>0){
	            for (User user : userList) {
	                //递归遍历
	                getAllDtSpread(user .getUid());
	            }
	        }
			   //所有递归完成返回 全局集合
	        return allUserList;
	    }
	    @Override
    	public void clearQJInfo() {
    	//在控制层重复调用service中递归会产生冗余,调用递归方法前调用此清理方法(巨坑!!)
	        allUserList.clear();
    	}
    }
    

超简单递归:

 	private int sum;
    public int JiSuan(Integer count){
    	//累加
        sum += count;
        count--;
        
        if(count>=0){
        	//递归
            JiSuan(count);
        }
        //递归结束的返回
        return sum;
    }
    public void Test(){
        //递归计算100内>0的整数之和
        JiSuan(100);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ywh22122

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值