<?php
function recursion(){
static $count = 0;
$count++;
echo $count." ";
if($count < 10){
recursion();
}
echo $count." ";
$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 回答
![?](http://img1.sycdn.imooc.com/54584f240001db0a02200220-100-100.jpg)
侃侃尔雅
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 出现
![?](http://img1.sycdn.imooc.com/545868b60001587202200220-100-100.jpg)
翻阅古今
TA贡献1780条经验 获得超5个赞
递归一层层嵌套,到最后一层$count
为10时,停止执行,此时输出为 1 2 3 4 5 6 7 8 9 10
,还未输出下方的echo $count." ";
;
之后开始输出下方的echo
,一层层输出,直至最开始的那一层,即$count++
后为1的这层:10 9 8 7 6 5 4 3 2 1
;
程序退出。
![?](http://img1.sycdn.imooc.com/545861b80001d27c02200220-100-100.jpg)
皈依舞
TA贡献1851条经验 获得超3个赞
我们可以把代码简单化,有助于你理解递归。PHP是顺序执行的,递归可以简单的理解为,将自身代码又复制了一遍。
因为10次太多,我们把他改为3次
<?php
function recursion(){
static $count = 0;
$count++; //$count = 1;
echo $count." "; //echo 1
if($count < 3){
$count++; //$count = 2
echo $count." "; //echo 2
if($count < 3){
$count++; //$count = 3
echo $count." "; //echo 3
if($count < 3){ //不成立,所以不重复执行了,开始执行if后面的代码
//...
} //echo 3
echo $count." ";
$count--; //$count =2
}
echo $count." "; //echo 2
$count--; //$count =1
}
echo $count." "; //echo 1
$count--; //$count =0
}
recursion();
?>
然后我们把函数体里的调用自身,改成自身的代码。就会发现,很简单,一步一步执行完毕了。
- 5 回答
- 0 关注
- 571 浏览
添加回答
举报
0/150
提交
取消