編程基礎(chǔ)技術(shù),java中的遞歸方法

編程基礎(chǔ)技術(shù),java中的遞歸方法

長沙一度軟件培訓(xùn)      2022-04-07 14:28:01     8

編程基礎(chǔ)技術(shù),java中的遞歸方法,一、含義遞歸算法是一種直接或間接地調(diào)用自身的算法。在計算機(jī)編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹

一、含義

遞歸算法是一種直接或間接地調(diào)用自身的算法。在計算機(jī)編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。

二、例子

99乘法表的例子

1:普通實現(xiàn)99乘法表太簡單,是個程序員都會,實現(xiàn)如下:

package?test.ms;?public?class?Test99?{??public?static?void?main(String[]?args)?{??for(int?i=1;?i<=9;i++){???for(int?j=1;?j<=i;?j++){???System.out.print(j+"?*?"+i+?"?=?"+(i*j)?+"?");???}???System.out.println();??}}??}

2:用遞歸方式實現(xiàn)99乘法表

代碼如下:

package?test.ms;?public?class?MultiTable?{?public?static?void?main(String?args[])?{?????m(9);???}?????public?static?void?m(int?i)?{?????if?(i?==?1)?{???????System.out.println("1*1=1?");?????}?else?{???????m(i?-?1);???????for?(int?j?=?1;?j?<=?i;?j++)?{?????????System.out.print(j?+?"*"?+?i?+?"="?+?j?*?i?+?"?");???????}???????System.out.println();?????}???}??}

遞歸的方式調(diào)用圖示:

每一個方法的調(diào)用都會產(chǎn)生一個棧幀,壓入到方法棧,當(dāng)遞歸調(diào)用的時候,方法棧中棧幀的圖示和上圖類似。

去掉方法中棧幀的引用關(guān)系更加直觀:如下圖所示:

簡化掉相應(yīng)的方法調(diào)用最后執(zhí)行情況如上圖所示,注意i一直在變j每次都是從1開始然后遞增到和i相等。

這樣上圖依次出棧后就得到了99乘法表:

總結(jié):

嵌套for循環(huán)和用遞歸實現(xiàn)的比較:

棧主要是用來存放棧幀的,每執(zhí)行一個方法就會出現(xiàn)壓棧操作,所以采用遞歸的時候產(chǎn)生的棧幀比較多,遞歸就會影響到內(nèi)存,非常消耗內(nèi)存,而使用for循環(huán)就執(zhí)行了一個方法,壓入棧幀一次,只存在一個棧幀,所以比較節(jié)省內(nèi)存。

以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機(jī)構(gòu)的小編針對“編程基礎(chǔ)技術(shù),java中的遞歸方法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。