递归就是自己调自己,最需要注意的就是结束条件,否则可能就是死循环,导致内存溢出
public T a(Object x,Object y)
{
if(条件true)
{
a(x1,y1);
}
else
{
return f(x,y);
}
}
例如:
1.求阶乘
5!=5x4x3x2x1
分析:递归是一层一层推进,第一层是 5*4,第二层4*3,第三层,3*2,递归入参分别是5,4,3,2,1,当为1时返回1,递归终止
public int f(n)
{
if(n=1)
{
return 1;
}
else
{
return n*f(n-1);
}
}
2.获取某一父节点下的所有子节点,多层级
分析:第一层入参是父节点本身,第二层入参是父节点下的第一层子节点,第三层是第一层所有节点下的子节点,当节点是叶子节点(没有节点的父节点是它)时,不用继续向下。
只要不是叶子节点,父节点找到的节点都是其子集setchild();
child
{
menuA
child
{
menuA1
child{}
}
menuB
child{}
.....
}
//菜单类
public class Menu
{
private int pid;
private int menuId;
private int menuName;
List<Menu> childs;
.....
}
//获取所有菜单对象
List<Menu> menus = menuDao.getAllMenus();
//查询菜单树方法
public List<Menu> getMenuTreeByPid(List<Menu>menus,int pid)
{
List<Menu> child = new ArrayList<Menu>();
for(Menu menu: menus)
{
if(menu.getPid== pid ) // 入口,说明当前pid下存在子节点
{
menu.setChild(getMenuTreeByPid(menus,menu.getMenuId));
child.add(menu);
}
}
return child;
}
原文地址:https://www.cnblogs.com/dawn2016/p/10230654.html