Java 遞歸重難點(diǎn)分析詳解與練習(xí)
遞歸是什么
就是一個(gè)方法在執(zhí)行的時(shí)候,自己調(diào)用自己。
遞歸的要求:
1 有一個(gè)趨近于終止的條件
2 實(shí)現(xiàn)遞歸要去推導(dǎo)出一個(gè)遞推公式
遞歸就是遞下去,歸上來(lái)。求 5 的階乘,代碼舉例:
public static int fact(int n){ if(n == 1){ return n; } return n*fact(n - 1); } public static void main(String[] args) { int n = 5; int ret = fact(n); System.out.println(ret); }
這里的終止條件就是 n 等于 1 時(shí),返回 1 就停止遞歸了。否則一直遞歸下去會(huì)造成棧區(qū)的溢出。
分析遞歸的過(guò)程
這里就分析上面這個(gè)代碼的遞歸過(guò)程。
如上圖,這就是上面這段遞歸代碼的遞歸過(guò)程,先傳入 5 不符合 if 條件。所以繼續(xù)遞歸,直到遞歸到 n == 1 的時(shí)候,此時(shí)不再遞歸,而是返回 1 .至此,遞下去結(jié)束。開(kāi)始?xì)w回來(lái),歸回來(lái)的時(shí)候,最后返回 1 ,然后一路返回,直到最后一個(gè) return 結(jié)束,也就是返回 120 。
遞歸練習(xí)
按順序打印一個(gè)數(shù)的每一位
例如:1234 打印出 1 2 3 4 代碼示例:
public static void print1(int n){ if(n == 0){ return; } print1(n / 10); System.out.print(n % 10+" "); } public static void main(String[] args) { int n = 1234; print1(n); }
整個(gè)遞歸過(guò)程如下所示:
到此這篇關(guān)于Java 遞歸重難點(diǎn)分析詳解的文章就介紹到這了,更多相關(guān)Java 遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解讀Mapper與Mapper.xml文件之間匹配的問(wèn)題
這篇文章主要介紹了解讀Mapper與Mapper.xml文件之間匹配的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼
Mybatis Plus是在Mybatis的基礎(chǔ)上的增強(qiáng),使得我們對(duì)一些基本的CRUD使用起來(lái)更方便,本文主要介紹了SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法
這篇文章主要介紹了Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Java的鎖機(jī)制:synchronized和CAS詳解
這篇文章主要介紹了Java的鎖機(jī)制synchronized和CAS詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09MyBatis-Plus里面的增刪改查詳解(化繁為簡(jiǎn))
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus里面的增刪改查的相關(guān)資料,Mybatis-Plus是一個(gè)基于Mybatis的增強(qiáng)工具,可以簡(jiǎn)化Mybatis的開(kāi)發(fā),提高開(kāi)發(fā)效率,需要的朋友可以參考下2023-07-07java中優(yōu)化大量if...else...方法總結(jié)
在我們平時(shí)的開(kāi)發(fā)過(guò)程中,經(jīng)??赡軙?huì)出現(xiàn)大量If else的場(chǎng)景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下2023-03-03Jlabel實(shí)現(xiàn)內(nèi)容自動(dòng)換行簡(jiǎn)單實(shí)例
這篇文章主要介紹了Jlabel實(shí)現(xiàn)內(nèi)容自動(dòng)換行簡(jiǎn)單實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01SpringAop自定義切面注解、自定義過(guò)濾器及ThreadLocal詳解
這篇文章主要介紹了SpringAop自定義切面注解、自定義過(guò)濾器及ThreadLocal詳解,Aspect(切面)通常是一個(gè)類,里面可以定義切入點(diǎn)和通知(切面 = 切點(diǎn)+通知),execution()是最常用的切點(diǎn)函數(shù),需要的朋友可以參考下2024-01-01詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案
這篇文章主要介紹了詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時(shí)間解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04