用外行人的话说,什么是使用PHP的递归函数

用外行人的话说,什么是使用PHP的递归函数

有人能用PHP(不使用Fibonacci)用外行人语言和示例向我解释递归函数吗?我在看一个例子,但是斐波纳契人完全把我弄糊涂了!

预先谢谢您;-)您在web开发中使用它们的频率有多高?


梵蒂冈之花
浏览 456回答 3
3回答

红糖糍粑

莱曼条款:递归函数是一个调用本身再深入一点:如果函数一直在调用自己,它如何知道何时停止?您设置了一个条件,称为基本情况。基本情况告诉我们的递归调用何时停止,否则它将无限循环。对我来说,一个很好的学习例子,因为我有很强的数学背景,阶乘..下面的注释显示,阶乘函数可能有点过了,我会把它放在这里,以防您想要它。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(".")一直。此外,您还必须检查要打印什么以及当前工作目录是什么

茅侃侃

递归是重复自身的东西。就像一个从内部调用自己的函数。让我在一个有点伪的例子中演示一下:想象一下你和你的朋友们一起喝啤酒,但如果你午夜之前不回家,你的妻子会给你下地狱的。为此,让我们创建orderAndDrinkBeer($time)函数,其中$time是午夜,减去您完成当前饮料和回家所需的时间。所以,到了酒吧,你点了第一瓶啤酒,开始喝酒:$timeToGoHome&nbsp;=&nbsp;'23';&nbsp;&nbsp;//&nbsp;Let's&nbsp;give&nbsp;ourselves&nbsp;an&nbsp;hour&nbsp;for&nbsp;last&nbsp;call&nbsp;and&nbsp;getting&nbsp;homefunction&nbsp;orderAndDrinkBeer($timeToGoHome)&nbsp;{&nbsp;&nbsp;//&nbsp;Let's&nbsp;create&nbsp;the&nbsp;function&nbsp;that's&nbsp;going&nbsp;to&nbsp;call&nbsp;itself. &nbsp;&nbsp;&nbsp;&nbsp;$beer&nbsp;=&nbsp;New&nbsp;Beer();&nbsp;&nbsp;//&nbsp;Let's&nbsp;grab&nbsp;ourselves&nbsp;a&nbsp;new&nbsp;beer &nbsp;&nbsp;&nbsp;&nbsp;$currentTime&nbsp;=&nbsp;date('G');&nbsp;//&nbsp;Current&nbsp;hour&nbsp;in&nbsp;24-hour&nbsp;format &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;($beer->status&nbsp;!=&nbsp;'empty')&nbsp;{&nbsp;&nbsp;//&nbsp;Time&nbsp;to&nbsp;commence&nbsp;the&nbsp;drinking&nbsp;loop &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$beer->drink();&nbsp;&nbsp;//&nbsp;Take&nbsp;a&nbsp;sip&nbsp;or&nbsp;two&nbsp;of&nbsp;the&nbsp;beer(or&nbsp;chug&nbsp;if&nbsp;that's&nbsp;your&nbsp;preference) &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Now&nbsp;we're&nbsp;out&nbsp;of&nbsp;the&nbsp;drinking&nbsp;loop&nbsp;and&nbsp;ready&nbsp;for&nbsp;a&nbsp;new&nbsp;beer &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($currentTime&nbsp;<&nbsp;$timeToGoHome)&nbsp;{&nbsp;//&nbsp;BUT&nbsp;only&nbsp;if&nbsp;we&nbsp;got&nbsp;the&nbsp;time &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;orderAndDrinkBeer($timeToGoHome);&nbsp;&nbsp;//&nbsp;So&nbsp;we&nbsp;make&nbsp;the&nbsp;function&nbsp;call&nbsp;itself&nbsp;again! &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;//&nbsp;Aw,&nbsp;snap!&nbsp;&nbsp;It&nbsp;is&nbsp;time&nbsp;:S &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;//&nbsp;Let's&nbsp;go&nbsp;home&nbsp;:( &nbsp;&nbsp;&nbsp;&nbsp;}}现在,我们只希望你不能喝足够的啤酒,以至于你的妻子会让你睡在沙发上,不管你是否准时回家但是的,递归就是这样的。
打开App,查看更多内容
随时随地看视频慕课网APP