更新時(shí)間:2022-05-19 10:43:26 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2213次
在本教程中,動(dòng)力節(jié)點(diǎn)小編將告訴大家Java遞歸函數(shù)及其優(yōu)缺點(diǎn)。
在 Java 中,調(diào)用自身的方法稱為Java遞歸方法。而且,這個(gè)過(guò)程稱為遞歸。
一個(gè)物理世界的例子是放置兩個(gè)相互面對(duì)的平行鏡子。它們之間的任何對(duì)象都將被遞歸反射。
遞歸如何工作?

在上面的例子中,我們r(jià)ecurse()從方法內(nèi)部調(diào)用了main方法。(正常的方法調(diào)用)。而且,在 recurse() 方法中,我們?cè)俅握{(diào)用了相同的遞歸方法。這是一個(gè)遞歸調(diào)用。
為了停止遞歸調(diào)用,我們需要在方法內(nèi)部提供一些條件。否則,該方法將被無(wú)限調(diào)用。
因此,我們使用if...else 語(yǔ)句(或類似方法)來(lái)終止方法內(nèi)的遞歸調(diào)用。
class Factorial {
static int factorial( int n ) {
if (n != 0) // termination condition
return n * factorial(n-1); // recursive call
else
return 1;
}
public static void main(String[] args) {
int number = 4, result;
result = factorial(number);
System.out.println(number + " factorial = " + result);
}
}
輸出:
4 階乘 = 24
在上面的示例中,我們有一個(gè)名為factorial(). factorial()是從方法中調(diào)用的main()。與數(shù)字作為參數(shù)傳遞的變量。
在這里,請(qǐng)注意聲明,
return n * factorial(n-1);
該factorial()方法正在調(diào)用自身。最初, n 的值是 4 inside factorial()。在下一次遞歸調(diào)用期間,將 3 傳遞給該factorial()方法。這個(gè)過(guò)程一直持續(xù)到n等于 0。
什么時(shí)候n等于 0,if語(yǔ)句返回 false,因此返回 1。最后,將累積的結(jié)果傳遞給main()方法。
當(dāng)進(jìn)行遞歸調(diào)用時(shí),變量的新存儲(chǔ)位置會(huì)在堆棧上分配。當(dāng)每次遞歸調(diào)用返回時(shí),舊的變量和參數(shù)都會(huì)從堆棧中刪除。因此,遞歸通常使用更多內(nèi)存并且通常很慢。
另一方面,遞歸解決方案更簡(jiǎn)單,編寫、調(diào)試和維護(hù)的時(shí)間更少。如果大家想了解更多相關(guān)知識(shí),不妨來(lái)關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java教程,里面的課程內(nèi)容細(xì)致全面,通俗易懂,適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)