为什么`$ count--`被执行了9次?

时间:2018-09-17 05:51:52

标签: php recursion

php -a输入互动模式,无论是在Apache中执行。

function recursion(){
    static $count = 0;
    $count++;
    echo $count."  ";
    if($count < 10){
        recursion();
    }
    echo $count."  ";
    $count--;
}

recursion();
1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1

退出条件是if($count < 10){,为什么结果不是
1 2 3 4 5 6 7 8 9 10 10?

为什么$count--被执行9次?

2 个答案:

答案 0 :(得分:0)

添加返回以停止进一步的功能执行

function recursion(){
    static $count = 0;
    $count++;
    echo $count."  ";
    if($count < 10){
        recursion();
        return;
    }
    echo $count."  ";
    $count--;
}

输出:

1  2  3  4  5  6  7  8  9  10  10

答案 1 :(得分:0)

如果您希望递归后不减少1到10:

<?php
function recursion(){
    static $count = 0;
    $count++;
    echo $count."  ";
    if ($count < 10) {
        recursion();
    }
}

为什么会这样?

因为它会循环循环 10 次,每次递增,直到到达

echo $count."  ";
$count--; 

它会停止嵌套,然后每次调用上述方法都会减小该值。

0-1
  +2
   +3
    +4
     +5
      +6
       +7
        +8
         +9
          +10
 <--------+
 12345678910

如果您按@VitalijsG中所示返回,则会得到1 2 3 4 5 6 7 8 9 10 10,因为它循环10次,但在除第10个循环之外的所有循环中返回,所以它只会命中:

echo $count."  ";
$count--; 

一次...