private String queryOrgDn(String parentid,String dn){
System.out.println("parentid : " +parentid);
int len = parentid.trim().length();
while(len > 5) {
AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("objectclass","uumOrg"));
filter.and(new EqualsFilter("ESSPorgId",parentid));
List<Org> alist = ldapTemplate_user.search("", filter.encode(),new OrgAttributeMapper());
System.out.println("alist : " + alist.size());
if(null!=alist&&0<alist.size()){
Org _aorg = alist.get(0);
String _parentid = _aorg.getESSPparentId();
String _dn = dn + _aorg.getOu();
queryOrgDn(_parentid,_dn);//@2 这里循环调用此方法
}else break;

}
return dn;//@1 
}我打断点调试过了,在运行到@1处后,程序又会回到@2处,陷入死循环。不是很懂递归调用,请指教!谢谢递归Java

解决方案 »

  1.   

    递归的大致结构:function(XXX){
        if(某个条件) return 确定的值
        else return function(XXX的某个表达式)
    }
      

  2.   

    谢谢,我改成加了一个return就好了,不知道为什么~请说明下private String queryOrgDn(String parentid,String dn){
    System.out.println("parentid : " +parentid);
    int len = parentid.trim().length();
    while(len > 5) {
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass","uumOrg"));
    filter.and(new EqualsFilter("ESSPorgId",parentid));
    List<Org> alist = ldapTemplate_user.search("", filter.encode(),new OrgAttributeMapper());
    System.out.println("alist : " + alist.size());
    if(null!=alist&&0<alist.size()){
    Org _aorg = alist.get(0);
    String _parentid = _aorg.getESSPparentId();
    String _dn = dn + _aorg.getOu();
    return queryOrgDn(_parentid,_dn);//此处加了一个return
    }else break;
    }
    return dn;
    }
      

  3.   

    先前的程序中:你那个if语句的判定条件是alist.size()>0 , 但是你if语句里面并没有对 alist 数组长度改变什么,所以你的成句在 len < 5 的时候会一直循环你加return后:你的程序会递归调用该方法,找到你想要的值,if条件不满足了,就会 break 掉,最后返回的想要的值。你想要的递归一个是调用自身的方法来递归的
      

  4.   

    谢谢,我改成加了一个return就好了,不知道为什么~请说明下private String queryOrgDn(String parentid,String dn){
    System.out.println("parentid : " +parentid);
    int len = parentid.trim().length();
    while(len > 5) {
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass","uumOrg"));
    filter.and(new EqualsFilter("ESSPorgId",parentid));
    List<Org> alist = ldapTemplate_user.search("", filter.encode(),new OrgAttributeMapper());
    System.out.println("alist : " + alist.size());
    if(null!=alist&&0<alist.size()){
    Org _aorg = alist.get(0);
    String _parentid = _aorg.getESSPparentId();
    String _dn = dn + _aorg.getOu();
    return queryOrgDn(_parentid,_dn);//此处加了一个return
    }else break;
    }
    return dn;
    }
    递归是自己调用自己,你不return的话,上一层调用就得不到返回值