• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

求php一段递归代码的理解

php 搞代码 3年前 (2022-01-25) 10次浏览 已收录 0个评论
文章目录[隐藏]
<code class="php">function test(){    static $count = 0;    $count++;    echo "-- ".$count." --\n";    if ($count < 10) {        test();    }    $count--;    echo "## ".$count." ##\n";}test();</code>

结果输出如下:

<code class="php">-- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6 ---- 7 ---- 8 ---- 9 ---- 10 --## 9 #### 8 #### 7 #### 6 #### 5 #### 4 #### 3 #### 2 #### 1 #### 0 ##</code>

我的疑惑是 当$count加到10后就不会再调用自身了,那么它会运行下面的代码$count--然后输出就结束了,可是为什么它还是运行了9次呢,求高手解答。

回复内容:

<code class="php">function test(){    static $count = 0;    $count++;    echo "-- ".$count." --\n";    if ($count < 10) {        test();    }    $count--;    echo "## ".$count." ##\n";}test();</code>

结果输出如下:

<code class="php">-- 1 ---- 2 ---- 3 ---- 4 ---- 5 ---- 6 ---- 7 ---- 8 ---- 9 ---- 10 --## 9 #### 8 #### 7 #### 6 #### 5 #### 4 #### 3 #### 2 #### 1 #### 0 ##</code>

我的疑惑是 当$count加到10后就不会再调用自身了,那么它会运行下面的代码$count--然后输出就结束了,可是为什么它还是运行了9次呢,求高手解答。

这样吧,我们假设让$count小于2时来看看整个执行过程:

  1. 将小于10改为小于2:

<code> function test()    {        static $count = 0;            $count++;        echo "-- ".$count." --\n";        if ($count < 2) {            test();        }        $count--;        echo "## ".$count." ##\n";    }</code>

2.将小于2时,里面递归的test()换成函数体内的代码:

<code>function test(){    static $count = 0;   // line 1    $count++; // line 2    echo "-- ".$count." --\n"; // line 3    if ($count < 2) { // line4        static $count = 0;        $count++; // line 5        echo "-- ".$count." --\n";// line 6        if ($count < 2) {// line 7            test();        }        $count--;// line 8        echo "## ".$count." ##\n";// line 9    }    $count--;// line 10    echo "## ".$count." ##\n";// line 11    }</code>

3.调用 test()后

<code>test()</code>

4.来看整个详细的执行流程:

<code> 4.1 第一次,line 1:$count = 0; 4.2 执行line 2后,$count = 1; 4.3 所以在line 3 会输出: **-- 1 --** 4.4 接着执行line 4,由于现在 $count < 2为真; 4.5 所以执行 line5后变为2 4.6 所以 line 6 会输出: **-- 2 --** 4.7 然后到 line 7,由于 $count = 2,不小于2直接执行line 8 4.8 line 8 执行后, $count变为1,接着执行line 9 4.9 在line 9 会输出: **## 1 ##** 4.10 接着就执行 line 10,$count再减1,就变为0 4.11 因此在 line 11会输出: **## 0 ##**</code>

5.总结:
当我们假定 $count小于2时,在上面详细的执行流程中我们看到:
test()总共被执行了2次,
输出结果为:
— 1 –,– 2 –,## 1 ##,## 0 ##
这时候再回头将 $count小于10,就容易解释楼主的疑问了。
不知道是否帮助到了你。有疑问继续联系。

没有再运行9次呀,test函数只运行了10次。但是每个函数中有两个输出,所以总共本2文来*源gao($daima.com搞@代@#码(网搞gaodaima代码输出了20次。

有没有return不会停止,在调用他自己后还会继续执行的

因为当$count=10的时候,该段代码还是执行了,你可以这样写

<code>function test(){    static $count = 0;    $count++;    echo "-- ".$count." --<br />";    if ($count < 10) {        test();        $count--;        echo "## ".$count." ##<br />";    }}test();</code>

@phping 这是我对于刚才递归的理解,和你的类似。

<code class="php">function test() {    static $count = 0; // 初始化静态变量$count    $count++; // $count = 1;    echo "-- ".$count." --\n"; // 输出 1    if($count < 3) { // 1 小于 3 为真        static $count = 0; // 初始        $count++; // $count = 2;        echo "-- ".$count." --\n"; // 输出 2        if($count < 3) { // 2 小于 3 为真            static $count = 0; // 初始            $count++; // $count = 3            echo "-- ".$count." --\n"; // 输出 3            if($count < 3) {} // 3 不小于 3 为假            $count--; // $count = 2;            echo "## ".$count." ##\n"; // 减后输出 2        }        $count--; // $count = 1        echo "## ".$count." ##\n"; // 减后输出 1    }    $count--; // $count = 0;    echo "## ".$count." ##\n"; // 减后输出 0}test();</code>

最后输出

<code class="php">-- 1 ---- 2 ---- 3 --## 2 #### 1 #### 0 ##</code>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:求php一段递归代码的理解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址