為一般人揭秘 PHP 中的遞歸函數
P粉211600174
P粉211600174 2023-10-17 08:41:23

任何人都可以用外行語言並使用範例向我解釋 PHP 中的遞歸函數(不使用斐波那契)嗎?我正在看一個例子,但斐波那契完全迷失了我!

提前謝謝您;-) 另外,您在 Web 開發中多久使用它們一次?

P粉211600174
P粉211600174

全部回覆(2)
P粉709307865

一個範例是列印給定目錄的任何子目錄中的每個檔案(如果這些目錄中沒有符號鏈接,這可能會以某種方式破壞該功能)。列印所有檔案的偽代碼如下所示:

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()...)。

P粉604669414

外行術語:

遞歸函數是呼叫自身的函數

#更深入一點:

如果函數不斷呼叫自身,它如何知道何時停止?您設定一個條件,稱為基本情況。基本情況告訴我們的遞歸呼叫何時停止,否則它將無限循環。

對我來說,一個很好的學習範例是階乘一个>。從下面的評論來看,階乘函數似乎有點太多了,我將其留在這裡以防萬一您需要它。

function fact($n) {
  if ($n === 0) { // our base case
     return 1;
  }
  else {
     return $n * fact($n-1); // 

關於在 Web 開發中使用遞歸函數,我個人並沒有使用遞歸呼叫。並不是說我認為依賴遞歸是不好的做法,但它們不應該是您的首選。如果使用不當,它們可能會致命。

雖然我無法與目錄範例競爭,但我希望這會有所幫助。

(4/20/10) 更新:

檢查這個問題也很有幫助,其中接受的答案以外行術語演示了遞歸函數如何運作。儘管OP的問題涉及Java,但概念是相同的,

#
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!