Java 菜鳥教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 遞歸

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

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

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

遞歸如何工作?

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

在上面的示例中,我們從main方法內(nèi)部調(diào)用了recurse()方法。  (正常方法調(diào)用)。 并且,在recurse()方法內(nèi)部,我們再次調(diào)用相同的recurse方法。 這是一個遞歸調(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

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

在這里,請注意以下語句:

return n * factorial(n-1);

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

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

階乘程序的工作流程

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

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

遞歸的優(yōu)缺點

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

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清