java 递归算法的项目实例和用法解释

1.概念:程序调用自身的编程技巧称为递归,简单说在java中就是在某个方法中调用自身方法

2.使用场景:

  2.1:例如遍历某个文件夹下的所有子文件夹和文件,注意不只是子文件夹,还有其后代的后代,通俗讲就是把他的儿子孙子,重孙。。。全部遍历出来

  2.2:在项目中经常会使用到树形结构,那通过顶级的节点,获取其所有子孙节点也是需要递归的

3.使用(基于树形结构的项目实例)

 例子1:

public interface DataTree {
	
	public Integer getId();
	
	public Integer getPid() ;

}
/**
	 * 通过父id,获取他下面的所有子孙id
	 * @param idList	结果集
	 * @param osList	所有的节点集合
	 * @param pid		父id
	 * @return
	 */
public static <T extends DataTree> List<Integer> getChildIds( List<Integer> idList, List<T> osList, int pid){
       System.out.println("运行了");                //1
       for(T os: osList){                          //2
         //遍历出父id等于参数的id,add进子节点集合    
         if(os.getPid()==pid){                     //3
           //递归遍历下一级
           getChildIds(idList,osList,os.getId());  //4
           idList.add(os.getId());                 //5
       }
    }
	return idList;                                 //6
}

有三个参数:

   idList是用来放结果的,这个是必须有的,你可以将其看成一个全局变量,由于递归会不停的调用自身,所以结果集是不能写在方法里面的

   osList:是所有的节点信息,用来和父节点作比较

为了方便解释流程,将代码的每一步标上了数字:

1->2>3->4(假设有子节点,第一层)  ->1->2->3->4(假设依然有子节点,第二层) ->1->2-3->2->3->2->3...(假设遍历完osList后依然没有子节点,第三层) ->6(在第三层直接return,返回继续执行第二层) ->5->2->3->2->3...(假设第二层只有一个子节点,即之后没有再遇到子节点) ->6(再第二曾return,返回继续执行第一层) ->5>2>3....(如果遇到子节点,则继续向下递归,没有则跳出循环) ->6

仔细思考下流程,其实是可以想明白的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

巴中第一皇子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值