84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
任何人都可以用外行語言並使用範例向我解釋 PHP 中的遞歸函數(不使用斐波那契)嗎?我正在看一個例子,但斐波那契完全迷失了我!
提前謝謝您;-) 另外,您在 Web 開發中多久使用它們一次?
一個範例是列印給定目錄的任何子目錄中的每個檔案(如果這些目錄中沒有符號鏈接,這可能會以某種方式破壞該功能)。列印所有檔案的偽代碼如下所示:
function printAllFiles($dir) { foreach (getAllDirectories($dir) as $f) { printAllFiles($f); // here is the recursive call } foreach (getAllFiles($dir) as $f) { echo $f; } }
想法是先列印所有子目錄,然後列印目前目錄的檔案。這個想法適用於所有子目錄,這就是為所有子目錄遞歸呼叫此函數的原因。
如果你想嘗試這個例子,你必須檢查特殊目錄. 和..,否則你會陷入呼叫printAllFiles(". ") 一直如此。此外,您必須檢查要列印的內容以及目前的工作目錄是什麼(請參閱opendir()、getcwd()...)。
.
..
printAllFiles(". ")
opendir()
getcwd()
遞歸函數是呼叫自身的函數
如果函數不斷呼叫自身,它如何知道何時停止?您設定一個條件,稱為基本情況。基本情況告訴我們的遞歸呼叫何時停止,否則它將無限循環。
對我來說,一個很好的學習範例是階乘一个>。從下面的評論來看,階乘函數似乎有點太多了,我將其留在這裡以防萬一您需要它。
function fact($n) { if ($n === 0) { // our base case return 1; } else { return $n * fact($n-1); // 關於在 Web 開發中使用遞歸函數,我個人並沒有使用遞歸呼叫。並不是說我認為依賴遞歸是不好的做法,但它們不應該是您的首選。如果使用不當,它們可能會致命。 雖然我無法與目錄範例競爭,但我希望這會有所幫助。 (4/20/10) 更新: 檢查這個問題也很有幫助,其中接受的答案以外行術語演示了遞歸函數如何運作。儘管OP的問題涉及Java,但概念是相同的,
關於在 Web 開發中使用遞歸函數,我個人並沒有使用遞歸呼叫。並不是說我認為依賴遞歸是不好的做法,但它們不應該是您的首選。如果使用不當,它們可能會致命。
雖然我無法與目錄範例競爭,但我希望這會有所幫助。
檢查這個問題也很有幫助,其中接受的答案以外行術語演示了遞歸函數如何運作。儘管OP的問題涉及Java,但概念是相同的,
一個範例是列印給定目錄的任何子目錄中的每個檔案(如果這些目錄中沒有符號鏈接,這可能會以某種方式破壞該功能)。列印所有檔案的偽代碼如下所示:
想法是先列印所有子目錄,然後列印目前目錄的檔案。這個想法適用於所有子目錄,這就是為所有子目錄遞歸呼叫此函數的原因。
如果你想嘗試這個例子,你必須檢查特殊目錄
.
和..
,否則你會陷入呼叫printAllFiles(". ")
一直如此。此外,您必須檢查要列印的內容以及目前的工作目錄是什麼(請參閱opendir()
、getcwd()
...)。外行術語:
遞歸函數是呼叫自身的函數
#更深入一點:
如果函數不斷呼叫自身,它如何知道何時停止?您設定一個條件,稱為基本情況。基本情況告訴我們的遞歸呼叫何時停止,否則它將無限循環。
對我來說,一個很好的學習範例是階乘一个>。從下面的評論來看,階乘函數似乎有點太多了,我將其留在這裡以防萬一您需要它。
- 了解基本遞迴
#