Java中的遞歸詳解(用遞歸實(shí)現(xiàn)99乘法表來講解)
1:普通實(shí)現(xiàn)99乘法表太簡單,是個(gè)程序員都會(huì),實(shí)現(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:用遞歸方式實(shí)現(xiàn) 99乘法表
代碼如下:
package test.ms;
public class MultiTable {
public static void main(String args[]) {
m(9);
}
/**
* 打印出九九乘法表
* @param i
*/
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)用圖示:

每一個(gè)方法的調(diào)用都會(huì)產(chǎn)生一個(gè)棧幀,壓入到方法棧,當(dāng)遞歸調(diào)用的時(shí)候,方法棧中棧幀的圖示和上圖類似。
去掉方法中棧幀的引用關(guān)系更加直觀:如下圖所示:

簡化掉相應(yīng)的方法調(diào)用最后執(zhí)行情況如上圖所示,注意 i 一直在變 j每次都是從1開始 然后遞增到和i相等。
這樣上圖依次出棧后就得到了 99 乘法表:
總結(jié):
嵌套for循環(huán) 和 用遞歸實(shí)現(xiàn) 的比較:
棧 主要是用來存放棧幀的,每執(zhí)行一個(gè)方法就會(huì)出現(xiàn)壓棧操作,所以采用遞歸的時(shí)候產(chǎn)生的棧幀比較多,遞歸就會(huì)影響到內(nèi)存,非常消耗內(nèi)存,而使用for循環(huán)就執(zhí)行了一個(gè)方法,壓入棧幀一次,只存在一個(gè)棧幀,所以比較節(jié)省內(nèi)存。
歡迎狠狠的拍磚。直到砸暈。
相關(guān)文章
springboot?publish?event?事件機(jī)制demo分享
這篇文章主要介紹了springboot?publish?event?事件機(jī)制demo,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Spring Boot整合JWT的實(shí)現(xiàn)步驟
本文主要介紹了Spring Boot整合JWT,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Springboot 跨域配置無效及接口訪問報(bào)錯(cuò)的解決方法
這篇文章主要介紹了Springboot 跨域配置無效及接口訪問報(bào)錯(cuò)的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
記一次線上SpringCloud Feign請求服務(wù)超時(shí)異常排查問題
這篇文章主要介紹了記一次線上SpringCloud Feign請求服務(wù)超時(shí)異常排查問題,本項(xiàng)目與下游項(xiàng)目均注冊在Eureka上面,對這個(gè)1秒就超時(shí)感到很迷惑,于是開始查閱底層源碼之旅。需要的朋友可以參考下2022-01-01
SpringMVC 通過commons-fileupload實(shí)現(xiàn)文件上傳功能
這篇文章主要介紹了SpringMVC 通過commons-fileupload實(shí)現(xiàn)文件上傳,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔
在多人協(xié)作的開發(fā)過程中,API文檔不僅可以減少等待,也能保證開發(fā)的持續(xù)進(jìn)行,這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔的相關(guān)資料,需要的朋友可以參考下2021-07-07
SpringBoot 自動(dòng)掃描第三方包及spring.factories失效的問題解決
這篇文章主要介紹了SpringBoot 自動(dòng)掃描第三方包及spring.factories失效的問題,本文給大家分享最新解決方法,需要的朋友可以參考下2023-05-05

