亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 遞歸

在本教程中,您將了解Java遞歸函數(shù)及其優(yōu)缺點(diǎn)。

在Java中,調(diào)用自身的方法稱為遞歸方法。并且,此過程稱為遞歸。

一個(gè)物理世界的實(shí)例是放置兩個(gè)彼此面對(duì)的平行反射鏡。它們之間的任何對(duì)象都將被遞歸地反射。

遞歸如何工作?

一個(gè)函數(shù)正在調(diào)用自己
Java遞歸的工作流程圖

在上面的示例中,我們從main方法內(nèi)部調(diào)用了recurse()方法。  (正常方法調(diào)用)。 并且,在recurse()方法內(nèi)部,我們?cè)俅握{(diào)用相同的recurse方法。 這是一個(gè)遞歸調(diào)用。

為了停止遞歸調(diào)用,我們需要在方法內(nèi)部提供一些條件。否則,該方法將被無限調(diào)用。

因此,我們使用if ... else語句(或類似方法)終止方法內(nèi)部的遞歸調(diào)用。

示例:使用遞歸的階乘

class Factorial {

    static int factorial( int n ) {
        if (n != 0)  // 終止條件
            return n * factorial(n-1); //遞歸調(diào)用
        else
            return 1;
    }

    public static void main(String[] args) {
        int number = 4, result;
        result = factorial(number);
        System.out.println(number + " 的階乘= " + result);
    }
}

輸出

4 的階乘= 24

在上面的示例中,我們有一個(gè)名為factorial()的方法。 從main()方法調(diào)用factorial()。 用傳遞的數(shù)字變量作為參數(shù)。

在這里,請(qǐng)注意以下語句:

return n * factorial(n-1);

factorial()方法正在調(diào)用自身。 最初,n的值在factorial()內(nèi)部為4。 在下一個(gè)遞歸調(diào)用期間,將3傳遞給factorial()方法。 此過程一直持續(xù)到n等于0。

當(dāng)n等于0時(shí),if語句返回false,因此返回1。最后,將累積的結(jié)果傳遞給main()方法。

階乘程序的工作流程

下圖將使您更好地了解如何使用遞歸執(zhí)行階乘程序。

使用遞歸查找數(shù)字的階乘
使用遞歸的階乘程序

遞歸的優(yōu)缺點(diǎn)

進(jìn)行遞歸調(diào)用時(shí),將在堆棧上分配新的變量存儲(chǔ)位置。隨著每個(gè)遞歸調(diào)用的返回,舊的變量和參數(shù)將從堆棧中刪除。因此,遞歸通常使用更多的內(nèi)存,并且通常很慢。

另一方面,遞歸解決方案要簡單得多,并且花費(fèi)更少的時(shí)間來編寫,調(diào)試和維護(hù)。