最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 方法遞歸的思路詳解

 更新時(shí)間:2022年04月14日 10:23:49   作者:Killing Vibe  
程序調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用。但是如果沒(méi)終止條件會(huì)造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件,接下來(lái)講解一下學(xué)習(xí)遞歸的思路

前言

今天給老鐵們回顧一下遞歸的思路以及方法,也是給自己的一個(gè)歸納總結(jié)。

一、什么是方法遞歸

所謂的方法遞歸,就是在一個(gè)方法(函數(shù))執(zhí)行的內(nèi)部,自己調(diào)用了自己的過(guò)程,稱之為 “遞歸” 。

遞歸分為兩個(gè)子過(guò)程:

  • 遞過(guò)程:函數(shù)不斷地調(diào)用自身,直到走到函數(shù)的終止條件,第一階段結(jié)束。
  • 歸過(guò)程:函數(shù)不斷地返回的過(guò)程。

例如, 我們求 N! 起始條件: N = 1 的時(shí)候, N! 為 1. 這個(gè)起始條件相當(dāng)于遞歸的結(jié)束條件. 遞歸公式: 求 N! ,

直接不好求, 可以把問(wèn)題轉(zhuǎn)換成 N! => N * (N-1)!

示例:遞歸求N的階乘

public static void main(String[] args) {
    int n = 5;
    int ret = factor(n);
    System.out.println("ret = " + ret);
}
public static int factor(int n) {
    if (n == 1) {
        return 1;
   }
    return n * factor(n - 1); // factor 調(diào)用函數(shù)自身
}
// 執(zhí)行結(jié)果
ret = 120

二、什么場(chǎng)景下能用遞歸

a.一個(gè)大問(wèn)題(這個(gè)方法的功能)可以拆分成若干個(gè)子問(wèn)題的解.

b.拆分后的子問(wèn)題和原問(wèn)題除了數(shù)據(jù)規(guī)模不同,解決思路完全相同.

c.必須存在遞歸的終止條件(不會(huì)無(wú)限拆分下去,一定能走到底~).

(看不懂先看下面(●ˇ∀ˇ●))

三、如何寫出遞歸代碼-重點(diǎn)

  • 先考慮這個(gè)函數(shù)的終止條件

比如上面的栗子:求N的階乘。

拿求5的階乘做例子:

在這里插入圖片描述

我們把大問(wèn)題(5的階乘)一直拆分到1的時(shí)候,問(wèn)題無(wú)法繼續(xù)拆分下去了,這個(gè)子問(wèn)題就是這個(gè)遞歸的最終條件。

所以我們寫代碼的時(shí)候,可以先把最終條件寫上:

if (n == 1) {
        return 1;
   }
  • 假設(shè)這個(gè)函數(shù)已經(jīng)寫好了(注意這個(gè)方法的語(yǔ)義)

在寫遞歸函數(shù)的時(shí)候,千萬(wàn)不要糾結(jié)這個(gè)函數(shù)內(nèi)部是如何實(shí)現(xiàn)的,而是要注意這個(gè)函數(shù)有什么功能(假設(shè)這個(gè)函數(shù)別人已經(jīng)寫好了),我們把它當(dāng)作一個(gè)黑盒子,你只是去調(diào)用這個(gè)函數(shù)罷了。

public static int factor(int n)

比如這個(gè)函數(shù)只能傳入一個(gè)n,目前我們只能知道這個(gè)n是多少,而n的階乘等于n* [(n-1)!],但是我們并不知道n-1的階乘是多少,那么就調(diào)用這個(gè)別人寫好的“黑盒子”。這個(gè)黑盒子的功能可以實(shí)現(xiàn)某個(gè)數(shù)的階乘。

n * factor(n - 1) // n*黑盒子

說(shuō)白了就是,把這個(gè)factor函數(shù)當(dāng)作別人已經(jīng)寫好了,你只需要關(guān)注如何去調(diào)用這個(gè)方法去輔助你解決問(wèn)題就可以了!

總結(jié)

寫出遞歸其實(shí)=終止條件+利用黑盒子去解決剩下的問(wèn)題,注意傳入的參數(shù)就可以很快把遞歸代碼寫出來(lái)(●ˇ∀ˇ●)。

到此這篇關(guān)于Java 方法遞歸的思路詳解的文章就介紹到這了,更多相關(guān)Java 遞歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件效果圖預(yù)覽之下載功能(2)

    Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件 FTP軟件效果圖預(yù)覽之下載功能(2)

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單FTP軟件,F(xiàn)TP軟件效果圖預(yù)覽之下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • SpringBoot集成minio實(shí)現(xiàn)文件上傳和刪除功能

    SpringBoot集成minio實(shí)現(xiàn)文件上傳和刪除功能

    這篇文章主要介紹了SpringBoot集成minio實(shí)現(xiàn)文件上傳和刪除功能,詳細(xì)介紹每個(gè)功能的實(shí)現(xiàn)步驟和代碼示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 解決BufferedReader.readLine()遇見(jiàn)的坑

    解決BufferedReader.readLine()遇見(jiàn)的坑

    這篇文章主要介紹了解決BufferedReader.readLine()遇見(jiàn)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java Predicate接口定義詳解

    Java Predicate接口定義詳解

    Predicate是Java中的一個(gè)函數(shù)式接口,它代表一個(gè)判斷邏輯,接收一個(gè)輸入?yún)?shù),返回一個(gè)布爾值,這篇文章主要介紹了Java Predicate接口的定義及示例代碼,需要的朋友可以參考下
    2025-04-04
  • SpringBoot中的響應(yīng)式web應(yīng)用詳解

    SpringBoot中的響應(yīng)式web應(yīng)用詳解

    這篇文章主要介紹了SpringBoot中的響應(yīng)式web應(yīng)用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè)及使用方法

    idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè)及使用方法

    這篇文章主要介紹了idea中使用SonarLint進(jìn)行代碼規(guī)范檢測(cè),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于Spring AOP使用時(shí)的一些問(wèn)題匯總

    關(guān)于Spring AOP使用時(shí)的一些問(wèn)題匯總

    這篇文章主要給大家匯總介紹了關(guān)于Spring AOP使用時(shí)的一些問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java-JFrame窗體美化方式

    Java-JFrame窗體美化方式

    這篇文章主要介紹了Java-JFrame窗體美化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Spring Boot之內(nèi)嵌tomcat版本升級(jí)操作示例

    Spring Boot之內(nèi)嵌tomcat版本升級(jí)操作示例

    這篇文章主要為大家介紹了Spring Boot之內(nèi)嵌tomcat版本升級(jí)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán)

    SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán)

    SpringSecurity是一個(gè)強(qiáng)大且靈活的身份驗(yàn)證和訪問(wèn)控制框架,本文主要介紹了SpringSecurity+Redis+Jwt實(shí)現(xiàn)用戶認(rèn)證授權(quán),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07

最新評(píng)論

尚义县| 民权县| 得荣县| 潜山县| 侯马市| 岳池县| 五峰| 金平| 营山县| 五大连池市| 长岛县| 阜阳市| 克拉玛依市| 江达县| 炎陵县| 临海市| 平谷区| 海宁市| 新田县| 昌平区| 沧源| 青冈县| 南召县| 兴业县| 陆良县| 青川县| 沙洋县| 平和县| 雷波县| 略阳县| 平潭县| 海原县| 齐齐哈尔市| 伊金霍洛旗| 宣汉县| 汉川市| 靖边县| 苏尼特右旗| 台中市| 龙山县| 陇川县|