java中的递归思想及应用

递归就是自己调自己,最需要注意的就是结束条件,否则可能就是死循环,导致内存溢出

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;
}
 

猜你喜欢

转载自www.cnblogs.com/dawn2016/p/10230654.html
今日推荐