在本教程中,您將了解Java遞歸函數(shù)及其優(yōu)缺點。
在Java中,調(diào)用自身的方法稱為遞歸方法。并且,此過程稱為遞歸。
一個物理世界的實例是放置兩個彼此面對的平行反射鏡。它們之間的任何對象都將被遞歸地反射。
在上面的示例中,我們從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í)行階乘程序。
進行遞歸調(diào)用時,將在堆棧上分配新的變量存儲位置。隨著每個遞歸調(diào)用的返回,舊的變量和參數(shù)將從堆棧中刪除。因此,遞歸通常使用更多的內(nèi)存,并且通常很慢。
另一方面,遞歸解決方案要簡單得多,并且花費更少的時間來編寫,調(diào)試和維護。