java中的遞迴思想及應用
阿新 • • 發佈:2019-01-07
遞迴就是自己調自己,最需要注意的就是結束條件,否則可能就是死迴圈,導致記憶體溢位
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; }