Java 递归调用 recursive 给一个参数 返回一大堆
Posted 三目鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 递归调用 recursive 给一个参数 返回一大堆相关的知识,希望对你有一定的参考价值。
需求: 需要组装成对象多层嵌套式的 json字符串;
想到使用 递归来完成这个多层嵌套:
憋了四个小时,终于写出来了;
先看效果:
数据库中的数据:
拼装后的效果:
[ EmpVO{ ename=\'孙老三1\', empno=10, mgr=0, subordinates=[ EmpVO{ ename=\'KING\', empno=7839, mgr=10, subordinates=[ EmpVO{ ename=\'JONES\', empno=7566, mgr=7839, subordinates=[ EmpVO{ ename=\'SCOTT\', empno=7788, mgr=7566, subordinates=[ EmpVO{ ename=\'ADAMS\', empno=7876, mgr=7788, subordinates=null } ] }, EmpVO{ ename=\'FORD\', empno=7902, mgr=7566, subordinates=[ EmpVO{ ename=\'SMITH\', empno=7369, mgr=7902, subordinates=null } ] } ] }, EmpVO{ ename=\'BLAKE\', empno=7698, mgr=7839, subordinates=[ EmpVO{ ename=\'ALLEN\', empno=7499, mgr=7698, subordinates=null }, EmpVO{ ename=\'WARD\', empno=7521, mgr=7698, subordinates=null }, EmpVO{ ename=\'MARTIN\', empno=7654, mgr=7698, subordinates=null }, EmpVO{ ename=\'TURNER\', empno=7844, mgr=7698, subordinates=null }, EmpVO{ ename=\'JAMES\', empno=7900, mgr=7698, subordinates=null } ] }, EmpVO{ ename=\'CLARK\', empno=7782, mgr=7839, subordinates=[ EmpVO{ ename=\'MILLER\', empno=7934, mgr=7782, subordinates=null } ] } ] } ] }, EmpVO{ ename=\'陈老五1\', empno=20, mgr=0, subordinates=[ EmpVO{ ename=\'1\', empno=200, mgr=20, subordinates=[ EmpVO{ ename=\'钱老二\', empno=2000, mgr=200, subordinates=null } ] } ] }, EmpVO{ ename=\'zas1\', empno=30, mgr=0, subordinates=[ EmpVO{ ename=\'陈生\', empno=300, mgr=30, subordinates=[ EmpVO{ ename=\'李四\', empno=3000, mgr=300, subordinates=null } ] } ] } ]
上代码:
public class RecursiveDemo { EmpService service = new EmpService(); public static void main(String[] args) throws SQLException, ClassNotFoundException { EmpVO emp = new EmpVO(); RecursiveDemo rd = new RecursiveDemo(); List<EmpVO> l = rd.recursive21(0); System.out.println(l); } List<EmpVO> recursive21(int mgr) throws SQLException, ClassNotFoundException { List<EmpVO> l = null; List<EmpVO> subordinates = service.getEmpsByMgr(mgr); if (subordinates != null && subordinates.size() > 0) { l = new ArrayList<EmpVO>(); List<EmpVO> list = null; for (EmpVO empvo : subordinates) { list = recursive21(empvo.getEmpno()); empvo.setSubordinates(list); l.add(empvo); } } return l; } }
很有意思的是: 参数和返回结果:
我先后尝试了 : 参数是 emp 返回结果是 emp ; 参数是 list 返回结果是 list ; 参数是emp 返回结果是list ; 终于后来又尝试 参数 int 返回结果list ;
从我对参数和返回结果的预设 可以看出:
开始时 我的理解时: 最终的目标是返回一个对象 ; 所以 返回结果类型是 对象;
又参考 dom4j 遍历 xml 文档 ; 觉得 返回应该是一个list ;
对传入参数的理解 : 刚开始也是不对的 ; 认为可能是 list 或者 对象 ;
后来 又 参考 dom4j 遍历 xml 文档 : 觉得 参数可能不是一个直接的, 而是一个间接的 ;
综上所述:
递归 最常用的形式可能就是 : 给一个 返回一大堆 ;
如: Java 递归遍历文件夹;
如: dom4j递归遍历xml文件;
再问一个问题: 这种递归调用 可以 使用 尾递归 优化么?
不可以 : 遍历的缘故 .
以上是关于Java 递归调用 recursive 给一个参数 返回一大堆的主要内容,如果未能解决你的问题,请参考以下文章