PHP递归函数

时间:2013-08-03 11:52:43

标签: php recursion

我是递归概念的新手。我创建了以下示例来尝试理解递归。但我遇到了困难,并感谢你的帮助。

function getX($count){
    $count++;
    if($count <= 10){
        $countTemp = getX($count);
        echo $countTemp; //Shouldn't this skipped?
    }
    return $count;
}

getX(0);

我的困惑是上面的函数打印了11,10,9,8 ....但是不应该忽略代码echo $countTemp;,因为它上面的语句会导致递归?我可能会在这里比较递归和循环。

2 个答案:

答案 0 :(得分:2)

它不是也不应该被忽略,只是延迟执行 - 这就是为什么你以相反的顺序得到数字。当$count达到11时,将跳过if条件中的代码,并将$count的值返回到第10次迭代(在if内)并回显为$countTemp。在此迭代中,$count为10,这将返回到第9次迭代,并再次作为$countTemp回显。

答案 1 :(得分:2)

执行顺序如下:

if 1 <= 10 true call getX(1)
    if 2 <= 10 true call getX(2)
        if n <= 10 call getX(n)
            if 11 <= 10 false
            // now go all the way back to the getX(0)
            return and echo 11;
        return and echo n;
    return and echo 2;
return and echo 1;

可视化您的代码:

recursion explained

用文字解释:

  • $count为11之前,它会继续使用getX()(1 + 2)
  • 致电$count
  • 一旦iffalse,它就会开始处理剩余的代码,例如它会return $count(3)
  • 然后将其分配并回显为$countTemp(4 + 5)
  • 然后再次返回$count,直到它回到原来的被叫方。 (5回到4)