求php一段递归代码的理解

php中文网
发布: 2016-06-06 20:14:10
原创
1167人浏览过

<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时来看看整个执行过程:

立即学习PHP免费学习笔记(深入)”;

  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()后

seacms影视管理系统
seacms影视管理系统

海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需5分钟即可建立一个海量的视频讯息的行业网站。 海洋cms采用PHP+MYSQL架构,原生PHP代码带来卓越的访问速度和负载能力免去您的后顾之优。海洋cms支持一键转换原max的模板和数据,实现网站无缝迁移到新平台。众多人性化功能设计,超

seacms影视管理系统 116
查看详情 seacms影视管理系统
<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次。但是每个函数中有两个输出,所以总共输出了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>
登录后复制
相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号