为普通人揭秘 PHP 中的递归函数
P粉211600174
P粉211600174 2023-10-17 08:41:23
0
2
743

任何人都可以用外行语言并使用示例向我解释 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,但概念是相同的,

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板