递归函数返回反向值

时间:2015-08-31 14:42:25

标签: php recursion

您好我需要在php递归函数中进行一次澄清,请参阅下面的代码。

<?php 
function test($count=1){
    if($count <5){
        echo $count;
        test(++$count);
    }
    echo $count;
}
test();
?>

对于上述功能,我得到这样的输出1 2 3 4 5 5 4 3 2 我知道前6个元素的逻辑,但我不知道反向元素是如何产生的。请解释我的逻辑

2 个答案:

答案 0 :(得分:1)

每次迭代都会打印出$count两次;一次&#34;在下降的路上&#34;并且一旦&#34;正在上升&#34;。你有两个echo $count陈述;一个在调用新test()之前调用的函数,并在递归返回后调用它。由于$count不是全局变量,因此每次迭代都会为$count保留自己的值

答案 1 :(得分:1)

输出的后半部分来自第二个echo语句。 您可以向echo添加标记以使事情变得明显:

<?php 
function test($count=1){
    if($count <5){
        echo "A:$count ";
        test(++$count);
    }
    echo "B:$count ";
}
test();
?>
// will print A:1 A:2 A:3 A:4 B:5 B:5 B:4 B:3 B:2

以下是显示echo顺序的伪调用图:

test(1) {
  echo A:1
  test(2) {
    echo A:2
    test(3) {
      echo A:3
      test(4) {
        echo A:4
        test(5) {
          echo B:5
        }
        echo B:5
      }
      echo B:4
    }
    echo B:3
  }
  echo B:2
}