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

Java 方法遞歸的思路詳解

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

前言

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

一、什么是方法遞歸

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

遞歸分為兩個子過程:

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

例如, 我們求 N! 起始條件: N = 1 的時候, N! 為 1. 這個起始條件相當于遞歸的結(jié)束條件. 遞歸公式: 求 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

二、什么場景下能用遞歸

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

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

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

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

三、如何寫出遞歸代碼-重點

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

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

拿求5的階乘做例子:

在這里插入圖片描述

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

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

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

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

public static int factor(int n)

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

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

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    解決BufferedReader.readLine()遇見的坑

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

    Java Predicate接口定義詳解

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

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

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

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

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

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

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

    Java-JFrame窗體美化方式

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

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

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

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

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

最新評論

东乡县| 普宁市| 丁青县| 台东县| 德惠市| 新乐市| 久治县| 长葛市| 南汇区| 大化| 通海县| 金川县| 马山县| 苍南县| 清原| 福安市| 太保市| 九江市| 密山市| 西林县| 博野县| 伊春市| 桦南县| 洛川县| 资溪县| 江安县| 杂多县| 临漳县| 定襄县| 明水县| 星子县| 平邑县| 双江| 武穴市| 南乐县| 义马市| 德安县| 屏东县| 西乌| 利川市| 虹口区|