代碼如下:
成都創(chuàng)新互聯(lián)于2013年創(chuàng)立,先為東臺等服務(wù)建站,東臺等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為東臺企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
import java.util.ArrayList;
import java.util.List;
class Org {
private String id;
private String name;
private String pid;
public Org(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
@Override
public String toString() {
return "Org [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}
public class App {
static void find(ListOrg list, String pid) {
list.stream().filter(p - p.getPid().equals(pid))
.forEach(org - {
System.out.println(org);
find(list, org.getId());
});
}
public static void main(String[] args) {
ListOrg list = new ArrayList();
list.add(new Org("111", "公司", "0"));
list.add(new Org("222", "部門", "111"));
list.add(new Org("333", "小組", "222"));
list.add(new Org("444", "員工1", "333"));
list.add(new Org("555", "員工2", "333"));
find(list, "0");
System.out.println("------------------------------------");
find(list, "111");
}
}
運行結(jié)果:
這個很好寫的,代碼如下:
private ListDept recursionDept(ListDept ld){
for(int i=0; ild.size(); i++) {
Dept d = ld.get(i)
loop(d);
}
}
private void loop(Dept d) {
ListDept children=service.getChildDept(d.id);
if (children.size() 0) {
d.setChildren(children); // 這里假設(shè)子列表屬性的名字就是children
for(int j=0; jchidren.size(); j++){
loop(children.get(j);
}
}
}
這個題目對初學(xué)者來說比較難的一點是,得想明白要自己建一個遞歸方法(loop)
一、遞歸算法基本思路:
Java遞歸算法是基于Java語言實現(xiàn)的遞歸算法。遞歸算法是一種直接或者間接調(diào)用自身函數(shù)或者方法的算法。遞歸算法實質(zhì)是把問題分解成規(guī)模縮小的同類問題的子問題,然后遞歸調(diào)用方法表示問題的解。遞歸往往能給我們帶來非常簡潔非常直觀的代碼形式,從而使我們的編碼大大簡化,然而遞歸的思維確實跟我們的常規(guī)思維相逆的,通常都是從上而下的思維問題,而遞歸趨勢從下往上的進行思維。
二、遞歸算法解決問題的特點:
【1】遞歸就是方法里調(diào)用自身。
【2】在使用遞歸策略時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。
【3】遞歸算法代碼顯得很簡潔,但遞歸算法解題的運行效率較低。所以不提倡用遞歸設(shè)計程序。
【4】在遞歸調(diào)用的過程中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等,所以一般不提倡用遞歸算法設(shè)計程序。
【5】在做遞歸算法的時候,一定把握出口,也就是做遞歸算法必須要有一個明確的遞歸結(jié)束條件。這一點是非常重要的。其實這個出口就是一個條件,當滿足了這個條件的時候我們就不再遞歸了。
三、代碼示例:
public?class?Factorial?{
//this?is?a?recursive?function
int?fact(int?n){
if?(n==1)?return?1;
return?fact(n-1)*n;
}
}
public?class?TestFactorial?{
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
Factorial?factorial=new?Factorial();
System.out.println("factorial(5)="+factorial.fact(5));
}
}
代碼執(zhí)行流程圖如下:
此程序中n=5就是程序的出口。