更新時(shí)間:2019-11-11 16:10:10 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2852次
程序調(diào)用自身的編程技巧稱為遞歸(recursion)。遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。但是如果沒(méi)終止條件會(huì)造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件。接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)如何使用遞歸算法計(jì)算自然數(shù)之和,如例Example1.java。
publicclassExample1{
publicstaticvoidmain(String[]args){
intsum=getsum(4);//調(diào)用遞歸方法,獲得1~4的和
System.out.println("sum="+sum);//打印結(jié)果
}
//下面的方法使用遞歸實(shí)現(xiàn)求1~n的和
publicstaticintgetsum(intn){
if(n==1){
//滿足條件,遞歸結(jié)束
return1;
}
inttemp=getSum(n-1);
returntemp+n;
}
}
運(yùn)行結(jié)果為:
sun=10
Example1.java中,定義了一個(gè)getSum()方法用于計(jì)算1~n之間自然數(shù)之和。例程中的12行代碼相當(dāng)于在getSum()方法的內(nèi)部調(diào)用了自身,這就是方法的遞歸,整個(gè)遞歸過(guò)在n==1時(shí)結(jié)束。整個(gè)遞歸過(guò)程中g(shù)etsum()方法被調(diào)用了4次,每次調(diào)用時(shí),n的值都會(huì)遞減。當(dāng)n的值為1時(shí),所有遞歸調(diào)用的方法都會(huì)以相反的順序相繼結(jié)束,所有的返回值會(huì)進(jìn)行累加,最終得到結(jié)果10。
使用遞歸時(shí)需要注意的問(wèn)題。
【1】遞歸就是方法里調(diào)用自身。
【2】在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱為遞歸出口。
【3】遞歸算法代碼顯得很簡(jiǎn)潔,但遞歸算法解題的運(yùn)行效率較低。所以不提倡用遞歸設(shè)計(jì)程序。
【4】在遞歸調(diào)用的過(guò)程中系統(tǒng)為每一層的返回點(diǎn)、局部量等開(kāi)辟了棧來(lái)存儲(chǔ)。遞歸次數(shù)過(guò)多容易造成棧溢出等,所以一般不提倡用遞歸算法設(shè)計(jì)程序。
【5】在做遞歸算法的時(shí)候,一定把握出口,也就是做遞歸算法必須要有一個(gè)明確的遞歸結(jié)束條件。這一點(diǎn)是非常重要的。其實(shí)這個(gè)出口就是一個(gè)條件,當(dāng)滿足了這個(gè)條件的時(shí)候我們就不再遞歸了。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“Java遞歸的意義以及用法”的內(nèi)容,希望對(duì)大家有幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
零基礎(chǔ)自學(xué)java教程推薦
最新java視頻教程免費(fèi)下載(從入門(mén)到精通):http://www.ilovecolors.com.cn/video.html
零基礎(chǔ)java自學(xué)教程:http://www.ilovecolors.com.cn/tutorial_java_se/
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)