0

我是递归概念的新手。我创建了以下示例来尝试理解递归。但我遇到了困难,希望能得到您的帮助。

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

getX(0);

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

4

2 回答 2

2

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

于 2013-08-03T12:03:26.513 回答
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;

在您的代码上可视化:

递归解释

用文字解释:

  • 直到$count是 11,它会继续调用getX()( $count1+2)
  • 一旦你iffalse,它将开始处理剩余的代码,例如它会return $count(3)
  • 然后将其分配并回显为$countTemp(4+5)
  • 然后$count再次返回,直到它回到原来的被调用者。(5回4)
于 2013-08-03T12:05:59.953 回答