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