遞迴的簡便寫法?
簡單的怎麼寫呢?有什麼優缺點呢?
工具/原料
FOR迴圈
傳遞物件,把物件當作引數來用
方法/步驟
參考java常用遞迴程式碼
//Top代表樹的的根節點
private void showNodeList(Collection
for(Node top:topList)
{
//顯示頂點
System.out.println(top.getName());
//顯示子樹
showNodeList(top.getChildren())
}
}
一些比較好的書籍
所謂遞迴就是迴圈,就是呼叫你本身的迴圈體,需要一個出口,不然就是死迴圈。
請看一個簡單的例子
說明:此方法就是呼叫了遞迴,recursion(car,i)自已呼叫了自已的方法。從此方法中,可以先對它進行了傳遞引數,分別是car(值),i(對遞迴次數的控制),car=2*(car-3000)這是對car第一次的計算,用if判斷是否結束,在這個if判斷中把每次遞迴都放入car,進行計算的值返回。這個遞迴直到12次,計算car的值都放入了car中,打印出car的總和,結束(出口)
缺點:由此可見遞迴就是呼叫自已的,方法與方法之間,類與類之間都可以。當然那我們在使用其的時候,要宣告一個操作的終結點(出口)。遞迴呼叫會增加記憶體負擔,因為每次呼叫一回方法都要開闢一段棧空間(先進後出),知道該方法滿足條件後才釋放。有結束條件了,是非常好的,否則你的遞迴程式會因為棧空間不足而中止的。
壞處:因為遞迴需要你的作業系統中的堆和棧,所以空間消耗上要比非遞迴程式碼要大的多,而且遞迴深度太大了,可能系統支撐不了。
注意事項
用一個方法就可以取到下面所有的子樹的集合
但方法中傳遞的時候傳遞的引數必須是集合,然後遍歷此集合,讓每一元素通過select * from Id=??去那其下面的子集合,然後遍歷出來的子集合直接作為一個引數傳遞你寫的這個方法中,也就是再此呼叫下此方法,這樣最後就可以把每一個分支中的集合都傳遞過來,最後拿到每個分支中的最後一個分支物件傳遞過來後,就發現這就是要For迴圈得到的物件。