我是递归概念的新手。我创建了以下示例来尝试理解递归。但我遇到了困难,并感谢你的帮助。
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;
,因为它上面的语句会导致递归?我可能会在这里比较递归和循环。
答案 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;
$count
为11之前,它会继续使用getX()
(1 + 2)$count
if
为false
,它就会开始处理剩余的代码,例如它会return $count
(3)$countTemp
(4 + 5)$count
,直到它回到原来的被叫方。 (5回到4)