这个递归函数的运行结果不明白

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

请问运行结果为何是

1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1

1.为何不是
1 2 3 4 5 6 7 8 9 10 10
2.它的退出条件是什么?

侃侃无极
浏览 572回答 5
5回答

侃侃尔雅

1.因为PHP是同步执行,你满足条件一直递归执行recursion()自然就是相当于一直嵌套,那么同步执行下来自然就是 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1你可以把 其中一个 换成其他的就能很直观的看出来了2.当$count = 10 的时候自然就退出了,不执行递归,所以会有 10 10 出现

翻阅古今

递归一层层嵌套,到最后一层$count为10时,停止执行,此时输出为 1 2 3 4 5 6 7 8 9 10,还未输出下方的echo $count."&nbsp; ";;之后开始输出下方的echo,一层层输出,直至最开始的那一层,即$count++后为1的这层:10 9 8 7 6 5 4 3 2 1;程序退出。

慕容708150

你只是进入了if判断,但是函数还没执行完,所以当判断完以后就开始执行函数后面的部分了,if里面的函数也是要执行的,所以会接着输出

皈依舞

我们可以把代码简单化,有助于你理解递归。PHP是顺序执行的,递归可以简单的理解为,将自身代码又复制了一遍。因为10次太多,我们把他改为3次 <?php function recursion(){ static $count = 0; $count++; //$count = 1; echo $count."&nbsp; "; //echo 1 if($count < 3){ $count++; //$count = 2 echo $count."&nbsp; "; //echo 2 if($count < 3){ $count++; //$count = 3 echo $count."&nbsp; "; //echo 3 if($count < 3){ //不成立,所以不重复执行了,开始执行if后面的代码 //... } //echo 3 echo $count."&nbsp; "; $count--; //$count =2 } echo $count."&nbsp; "; //echo 2 $count--; //$count =1 } echo $count."&nbsp; "; //echo 1 $count--; //$count =0 } recursion(); ?> 然后我们把函数体里的调用自身,改成自身的代码。就会发现,很简单,一步一步执行完毕了。
打开App,查看更多内容
随时随地看视频慕课网APP