任何人都可以用外行語言並使用範例向我解釋 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()
...)。外行術語:
遞歸函數是呼叫自身的函數
#更深入一點:
如果函數不斷呼叫自身,它如何知道何時停止?您設定一個條件,稱為基本情況。基本情況告訴我們的遞歸呼叫何時停止,否則它將無限循環。
對我來說,一個很好的學習範例是階乘一个>。從下面的評論來看,階乘函數似乎有點太多了,我將其留在這裡以防萬一您需要它。