
正确答案应该是 2 1 <-->1 2
if($n>1)
test($n-1);
else
echo '<-->';
$j=2;
echo $n" ";//这个语句是在if else语句外的!!等调用完if else的语句后,这句依然要被执行,也就是说,在递归调用到最底层,往回的时候,也执行了这些语句~ 1 2 就是这里来的!
test(2);
function test($n){
echo $n" ";//输出2" "
if($n>1)
test($n-1);//调用test(1)
echo $n" ";//输出1
if($n>1)
test($n-1);
else
echo "<-->";
$j=2;
echo $n" ";//输出1" "
else
echo '<-->';
$j=2;//这句是没作用的
echo $n" ";//输出2" "
}
这样还不明白的话,无解了!多看看递归的思想吧!
$arr = array(1,'b',2,array(3,'c',array(8,'m',10)));
function d(&$arr){
foreach($arr as $k=>$v){
if(is_numeric($v)){
$arr[$k]=$v2;
}else{
$arr[$k]=$v;
}
if(is_array($v)){
d($arr[$k]);
}
}
}
d($arr);
print_r($arr);
首先运行的是catsort($arr,0,1);这样循环到北京市,满足循环里的if条件,于是运行catsort($arr,1,2);在这里循环到海定区的时候满足if,于是运行catsort($arr,3,3);在catsort($arr,3,3)里面,循环中没有一条是满足if条件的,也就是没有parent_id=3的元素,所以就没再执行catsort方法了。return之后继续catsort($arr,1,2);的循环,循环到朝阳区。
童鞋你好,你会产生这样的疑问是因为你没有搞清楚函数参数的使用范围,一级递归的过程,下来解析一下此函数的递归过程:
10 第一次递归 sum=10,先输出10,执行递归后,demo里面的 依然是10
9 第二次递归 sum=9,先输出9,执行递归后,demo里面的 依然是9
7 。
6 。
5 。
4 。
3 。
2 。
1 第10次递归 sum=1,先输出1,执行递归后,demo里面的 参数是1, 接着发生最后一次递归
0 第11次递归 demo里面的参数值为0,故不再递归了,由于这次sum=0 故执行else echo "--------------------<br>";
接着执行 echo $num"<br>"; 后返回sum=1 时 的 这里接着执行: echo $num"<br>";
}
一次向后倒着执行 echo $num"<br>";
} 故得到下面的结果!
---------------------------
0
1
2
3
4
5
6
7
8
9
10
/
递归实现无限极分类
@param $array 分类数据
@param $pid 父ID
@param $level 分类级别
@return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进
/
function getTree($array, $pid =0, $level = 0){
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static $list = []; foreach ($array as $key => $value){ //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
if ($value['pid'] == $pid){ //父节点为根节点的节点,级别为0,也就是第一级
$value['level'] = $level; //把数组放到list中
$list[] = $value; //把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]); //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
getTree($array, $value['id'], $level+1);
}
}
以上就是关于PHP里的这个递归函数是怎么个执行顺序全部的内容,包括:PHP里的这个递归函数是怎么个执行顺序、php递归Array、php递归问题(无限极分类)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)