Java 遞歸重難點分析詳解與練習(xí)
遞歸是什么
就是一個方法在執(zhí)行的時候,自己調(diào)用自己。
遞歸的要求:
1 有一個趨近于終止的條件
2 實現(xiàn)遞歸要去推導(dǎo)出一個遞推公式
遞歸就是遞下去,歸上來。求 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 時,返回 1 就停止遞歸了。否則一直遞歸下去會造成棧區(qū)的溢出。
分析遞歸的過程
這里就分析上面這個代碼的遞歸過程。
如上圖,這就是上面這段遞歸代碼的遞歸過程,先傳入 5 不符合 if 條件。所以繼續(xù)遞歸,直到遞歸到 n == 1 的時候,此時不再遞歸,而是返回 1 .至此,遞下去結(jié)束。開始?xì)w回來,歸回來的時候,最后返回 1 ,然后一路返回,直到最后一個 return 結(jié)束,也就是返回 120 。
遞歸練習(xí)
按順序打印一個數(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); }
整個遞歸過程如下所示:
到此這篇關(guān)于Java 遞歸重難點分析詳解的文章就介紹到這了,更多相關(guān)Java 遞歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合Mybatis Plus實現(xiàn)基本CRUD的示例代碼
Mybatis Plus是在Mybatis的基礎(chǔ)上的增強,使得我們對一些基本的CRUD使用起來更方便,本文主要介紹了SpringBoot整合Mybatis Plus實現(xiàn)基本CRUD的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-05-05Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法
這篇文章主要介紹了Java 凍結(jié)或解除凍結(jié)Excel中的行和列的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03java中優(yōu)化大量if...else...方法總結(jié)
在我們平時的開發(fā)過程中,經(jīng)??赡軙霈F(xiàn)大量If else的場景,代碼顯的很臃腫,非常不優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于java中優(yōu)化大量if...else...方法的相關(guān)資料,需要的朋友可以參考下2023-03-03SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解
這篇文章主要介紹了SpringAop自定義切面注解、自定義過濾器及ThreadLocal詳解,Aspect(切面)通常是一個類,里面可以定義切入點和通知(切面 = 切點+通知),execution()是最常用的切點函數(shù),需要的朋友可以參考下2024-01-01詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時間解決方案
這篇文章主要介紹了詳解SpringBoot2.0的@Cacheable(Redis)緩存失效時間解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04