通俗地说,是使用PHP的递归函数
任何人都可以用外行语言和示例向我解释PHP(不使用斐波那契)的递归函数吗?我正在看一个例子,但斐波那契完全失去了我!
提前感谢您;-)另外,您在Web开发中多久使用它们一次?
任何人都可以用外行语言和示例向我解释PHP(不使用斐波那契)的递归函数吗?我正在看一个例子,但斐波那契完全失去了我!
提前感谢您;-)另外,您在Web开发中多久使用它们一次?
递归函数是调用自身的函数
如果函数不断调用自身,它如何知道何时停止?您设置了一个条件,称为基本事例。基本情况告诉我们的递归调用何时停止,否则它将无限循环。
对我来说,这是一个很好的学习例子,因为我有很强的数学背景,是阶乘的。通过下面的评论,似乎阶乘函数可能有点太多了,我会把它留在这里,以防万一你想要它。
function fact($n) {
if ($n === 0) { // our base case
return 1;
}
else {
return $n * fact($n-1); // <--calling itself.
}
}
关于在Web开发中使用递归函数,我个人并不诉诸于使用递归调用。并不是说我认为依赖递归是不好的做法,但它们不应该是你的第一选择。如果使用不当,它们可能是致命的。
虽然我无法与目录示例竞争,但我希望这有所帮助。
检查这个问题也会有所帮助,其中接受的答案以外行术语演示了递归函数的工作原理。尽管OP的问题涉及Java,但概念是相同的,
一个例子是打印给定目录的任何子目录中的每个文件(如果这些目录中没有符号链接,这可能会以某种方式破坏函数)。打印所有文件的伪代码如下所示:
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()