Heim > Fragen und Antworten > Hauptteil
Kann mir jemand rekursive Funktionen in PHP (ohne Verwendung von Fibonacci) in Laiensprache und anhand von Beispielen erklären? Ich schaue mir ein Beispiel an, aber Fibonacci geht mir völlig verloren!
Vielen Dank im Voraus ;-) Und wie oft verwenden Sie sie in der Webentwicklung?
P粉7093078652023-10-18 00:23:39
一个示例是打印给定目录的任何子目录中的每个文件(如果这些目录中没有符号链接,这可能会以某种方式破坏该功能)。打印所有文件的伪代码如下所示:
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粉6046694142023-10-18 00:03:08
递归函数是调用自身的函数
如果函数不断调用自身,它如何知道何时停止?您设置一个条件,称为基本情况。基本情况告诉我们的递归调用何时停止,否则它将无限循环。
对我来说,一个很好的学习例子是阶乘一个>。从下面的评论来看,阶乘函数似乎有点太多了,我将其留在这里以防万一您需要它。
function fact($n) { if ($n === 0) { // our base case return 1; } else { return $n * fact($n-1); // <--calling itself. } }
关于在 Web 开发中使用递归函数,我个人并不使用递归调用。并不是说我认为依赖递归是不好的做法,但它们不应该是您的首选。如果使用不当,它们可能会致命。
虽然我无法与目录示例竞争,但我希望这会有所帮助。
检查这个问题也很有帮助,其中接受的答案以外行术语演示了递归函数如何工作。尽管OP的问题涉及Java,但概念是相同的,