为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
梵蒂冈之花 2019-06-26 17:02:51
用外行人的话说,什么是使用PHP的递归函数有人能用PHP(不使用Fibonacci)用外行人语言和示例向我解释递归函数吗?我在看一个例子,但是斐波纳契人完全把我弄糊涂了!预先谢谢您;-)您在web开发中使用它们的频率有多高?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

莱曼条款:

递归函数是一个调用本身

再深入一点:

如果函数一直在调用自己,它如何知道何时停止?您设置了一个条件,称为基本情况。基本情况告诉我们的递归调用何时停止,否则它将无限循环。

对我来说,一个很好的学习例子,因为我有很强的数学背景,阶乘..下面的注释显示,阶乘函数可能有点过了,我会把它放在这里,以防您想要它。

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

关于在Web开发中使用递归函数,我不亲自使用递归调用。我并不认为依赖递归是一种糟糕的做法,但它们不应该是您的第一个选择。如果使用不当,它们可能是致命的。

虽然我无法与目录示例竞争,但我希望这在一定程度上有所帮助。

检查这个问题也是有帮助的,在这个问题上,公认的答案用非专业术语演示了递归函数是如何工作的。尽管OP的问题涉及Java,但概念是相同的,



查看完整回答
反对 回复 2019-06-26
?
冉冉说

TA贡献1877条经验 获得超1个赞

例如,打印给定目录的任何子目录中的每个文件(如果在这些目录中没有符号链接,这可能会导致函数中断)。打印所有文件的伪代码如下所示:

function printAllFiles($dir) {
    foreach (getAllDirectories($dir) as $f) {
        printAllFiles($f); // here is the recursive call
    }
    foreach (getAllFiles($dir) as $f) {
        echo $f;
    }}

其思想是首先打印所有子目录,然后打印当前目录的文件。这个想法被应用于所有子目录,这也是对所有子目录递归调用此函数的原因。

如果您想要尝试这个例子,您必须检查特殊目录。...,否则你会被困在电话里printAllFiles(".")一直。此外,您还必须检查要打印什么以及当前工作目录是什么


查看完整回答
反对 回复 2019-06-26
?
茅侃侃

TA贡献1842条经验 获得超21个赞

递归是重复自身的东西。就像一个从内部调用自己的函数。让我在一个有点伪的例子中演示一下:

想象一下你和你的朋友们一起喝啤酒,但如果你午夜之前不回家,你的妻子会给你下地狱的。为此,让我们创建orderAndDrinkBeer($time)函数,其中$time是午夜,减去您完成当前饮料和回家所需的时间。

所以,到了酒吧,你点了第一瓶啤酒,开始喝酒:

$timeToGoHome = '23';  // Let's give ourselves an hour for last call and getting homefunction orderAndDrinkBeer($timeToGoHome) {  // Let's create the function that's going to call itself.
    $beer = New Beer();  // Let's grab ourselves a new beer
    $currentTime = date('G'); // Current hour in 24-hour format

    while ($beer->status != 'empty') {  // Time to commence the drinking loop
        $beer->drink();  // Take a sip or two of the beer(or chug if that's your preference)
    }

    // Now we're out of the drinking loop and ready for a new beer

    if ($currentTime < $timeToGoHome) { // BUT only if we got the time
        orderAndDrinkBeer($timeToGoHome);  // So we make the function call itself again!
    } else {  // Aw, snap!  It is time :S
        break; // Let's go home :(
    }}

现在,我们只希望你不能喝足够的啤酒,以至于你的妻子会让你睡在沙发上,不管你是否准时回家

但是的,递归就是这样的。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信