为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
侃侃无极 2019-03-08 21:36:19
<?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.它的退出条件是什么?
查看完整描述

5 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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 出现

查看完整回答
反对 回复 2019-03-18
?
翻阅古今

TA贡献1780条经验 获得超5个赞

递归一层层嵌套,到最后一层$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
程序退出。

查看完整回答
反对 回复 2019-03-18
?
慕容708150

TA贡献1831条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-18
?
皈依舞

TA贡献1851条经验 获得超3个赞

我们可以把代码简单化,有助于你理解递归。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();
?>

然后我们把函数体里的调用自身,改成自身的代码。就会发现,很简单,一步一步执行完毕了。

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 571 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信