3 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊
萊曼條款:
遞歸函數(shù)是一個(gè)調(diào)用本身
再深入一點(diǎn):
如果函數(shù)一直在調(diào)用自己,它如何知道何時(shí)停止?您設(shè)置了一個(gè)條件,稱(chēng)為基本情況。基本情況告訴我們的遞歸調(diào)用何時(shí)停止,否則它將無(wú)限循環(huán)。
對(duì)我來(lái)說(shuō),一個(gè)很好的學(xué)習(xí)例子,因?yàn)槲矣泻軓?qiáng)的數(shù)學(xué)背景,階乘..下面的注釋顯示,階乘函數(shù)可能有點(diǎn)過(guò)了,我會(huì)把它放在這里,以防您想要它。
function?fact($n)?{ ??if?($n?===?0)?{?//?our?base?case ?????return?1; ??} ??else?{ ?????return?$n?*?fact($n-1);?//?<--calling?itself. ??}}
關(guān)于在Web開(kāi)發(fā)中使用遞歸函數(shù),我不親自使用遞歸調(diào)用。我并不認(rèn)為依賴(lài)遞歸是一種糟糕的做法,但它們不應(yīng)該是您的第一個(gè)選擇。如果使用不當(dāng),它們可能是致命的。
雖然我無(wú)法與目錄示例競(jìng)爭(zhēng),但我希望這在一定程度上有所幫助。
檢查這個(gè)問(wèn)題也是有幫助的,在這個(gè)問(wèn)題上,公認(rèn)的答案用非專(zhuān)業(yè)術(shù)語(yǔ)演示了遞歸函數(shù)是如何工作的。盡管OP的問(wèn)題涉及Java,但概念是相同的,

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
例如,打印給定目錄的任何子目錄中的每個(gè)文件(如果在這些目錄中沒(méi)有符號(hào)鏈接,這可能會(huì)導(dǎo)致函數(shù)中斷)。打印所有文件的偽代碼如下所示:
function?printAllFiles($dir)?{ ????foreach?(getAllDirectories($dir)?as?$f)?{ ????????printAllFiles($f);?//?here?is?the?recursive?call ????} ????foreach?(getAllFiles($dir)?as?$f)?{ ????????echo?$f; ????}}
其思想是首先打印所有子目錄,然后打印當(dāng)前目錄的文件。這個(gè)想法被應(yīng)用于所有子目錄,這也是對(duì)所有子目錄遞歸調(diào)用此函數(shù)的原因。
如果您想要嘗試這個(gè)例子,您必須檢查特殊目錄。.
和..
,否則你會(huì)被困在電話(huà)里printAllFiles(".")
一直。此外,您還必須檢查要打印什么以及當(dāng)前工作目錄是什么

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
$timeToGoHome = '23'; // Let's give ourselves an hour for last call and getting homefunction orderAndDrinkBeer($timeToGoHome) { // Let's create the function that's going to call itself. $beer = New Beer(); // Let's grab ourselves a new beer $currentTime = date('G'); // Current hour in 24-hour format while ($beer->status != 'empty') { // Time to commence the drinking loop $beer->drink(); // Take a sip or two of the beer(or chug if that's your preference) } // Now we're out of the drinking loop and ready for a new beer if ($currentTime < $timeToGoHome) { // BUT only if we got the time orderAndDrinkBeer($timeToGoHome); // So we make the function call itself again! } else { // Aw, snap! It is time :S break; // Let's go home :( }}
- 3 回答
- 0 關(guān)注
- 499 瀏覽
添加回答
舉報(bào)