function test()
{
static $count = 0;
$count++;
echo "-- ".$count." --\n";
if ($count < 10) {
test();
}
$count--;
echo "## ".$count." ##\n";
}
test();
结果输出如下:
-- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 -- -- 6 -- -- 7 -- -- 8 -- -- 9 -- -- 10 -- ## 9 ## ## 8 ## ## 7 ## ## 6 ## ## 5 ## ## 4 ## ## 3 ## ## 2 ## ## 1 ## ## 0 ##
我的疑惑是 当$count加到10后就不会再调用自身了,那么它会运行下面的代码$count--然后输出就结束了,可是为什么它还是运行了9次呢,求高手解答。
回复内容:
function test()
{
static $count = 0;
$count++;
echo "-- ".$count." --\n";
if ($count < 10) {
test();
}
$count--;
echo "## ".$count." ##\n";
}
test();
结果输出如下:
-- 1 -- -- 2 -- -- 3 -- -- 4 -- -- 5 -- -- 6 -- -- 7 -- -- 8 -- -- 9 -- -- 10 -- ## 9 ## ## 8 ## ## 7 ## ## 6 ## ## 5 ## ## 4 ## ## 3 ## ## 2 ## ## 1 ## ## 0 ##
我的疑惑是 当$count加到10后就不会再调用自身了,那么它会运行下面的代码$count--然后输出就结束了,可是为什么它还是运行了9次呢,求高手解答。
这样吧,我们假设让$count小于2时来看看整个执行过程:
立即学习“PHP免费学习笔记(深入)”;
将小于10改为小于2:
function test()
{
static $count = 0;
$count++;
echo "-- ".$count." --\n";
if ($count < 2) {
test();
}
$count--;
echo "## ".$count." ##\n";
}
2.将小于2时,里面递归的test()换成函数体内的代码:
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
}
3.调用 test()后
51shop 由 PHP 语言开发, 使用快速的 MySQL 数据库保存数据 ,为中小型网站实现网上电子商务提供一个完美的解决方案.一、用户模块1. 用户注册:用户信息包括:用户ID、用户名、用户密码、性别、邮箱、省份、城市、 联系电话等信息,用户注册后不能立即使用,需由管理员激活账号,才可使用(此功能管理员可设置)2. 登录功能3. 资料修改:用户可修改除账号以后的所有资料4. 忘记密码:要求用
test()
4.来看整个详细的执行流程:
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 ##**
5.总结:
当我们假定 $count小于2时,在上面详细的执行流程中我们看到:
test()总共被执行了2次,
输出结果为:
-- 1 --,-- 2 --,## 1 ##,## 0 ##
这时候再回头将 $count小于10,就容易解释楼主的疑问了。
不知道是否帮助到了你。有疑问继续联系。
没有再运行9次呀,test函数只运行了10次。但是每个函数中有两个输出,所以总共输出了20次。
有没有return不会停止,在调用他自己后还会继续执行的
因为当$count=10的时候,该段代码还是执行了,你可以这样写
function test()
{
static $count = 0;
$count++;
echo "-- ".$count." --
";
if ($count < 10) {
test();
$count--;
echo "## ".$count." ##
";
}
}
test();
@phping 这是我对于刚才递归的理解,和你的类似。
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();
最后输出
-- 1 -- -- 2 -- -- 3 -- ## 2 ## ## 1 ## ## 0 ##










