1. 程式人生 > >java中的遞迴思想及應用

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