java recursive call 递归调用

java recursive call 递归调用

Question:

有一个父子关系的机构List,其中需要找到某个机构返回出来。每一个元素有标识:number 代表本身机构号、 parent是父机构号、children是子元素列表

Solution:

根据思考如果使用递归,有两种解决办法:

  1. 使用遍历的办法
    在这个list上,逐个获取元素,如果这个元素有子children,那么就需要获取子children并进行循环,遍历所有元素及children,直到找到我们所需要的机构位置.
  2. 使用按关系查找方法
    1. 假设要找的机构是curOrgan,那么我们查找list,如果本身不包含,那么就将curOrgan的父元素传进去,直到找到这个父节点未知。如果我们在这里找到的就是curOrgan,那么就需要退出
    2. 将查找到的父元素的children以list的参数传进去,重新以curOrgan进行查找。
    3. 将找到的organ return出来,作为最后的return;

第一种方法很普通,就略去。第二种我们看到需要有一个不变的参数curOrgan,还需要一个变动的参数,以curOrgan进行变化,还需要一个list.

coding:

private Organization getOrgan(Organization loopOrgan, List<Organization> list, String curOrgan){
    //省略list为null或者空的判断
    boolean flag = false;
    Organization findOrgan = null;
    for(Organizaiton organ : list){
        if(organ.getNumber().equals(loopOrgan.getNumber()){
            flag = true;
            if(organ.getNumber().equals(curOrgan){ 
                return organ;
            }else{
                loopOrgan = organ;
                break;
            }
        }

    }
    if(!flag){
        findOrgan = getOrgan(loopOrgan.getParent(), list, curOrgan);
    }else{
        findOrgan = getOrgan(getOrgan(curOrgan), loopOrgan.getChildren(), curOrgan);
    }

    return findOrgan;
}

summary:

对于递归思维,自己仍然是不很熟悉,尤其是逆向递归。这个问题最初自己想要两个变量来解决,但是发现没有办法决定跳出点,包括以后的思路也是决定不好跳出点,所以花了很长时间。要理解递归的关键是: 1.每次循环的操作都是相同的 2.跳出点不能是每次会产生变化的量,应该是一个常量或者不因循环变化的变量,并且需要唯一。否则就跳出来就是错误的结果。 如果同学有相关的递归好的资料或练习题,可不可以发给我一下,谢谢。yongkangchn@126.com.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值