新手跪求高手讲解递归! 跪求高手支教如何理解递归! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 递归其实就是“一个函数的自调用”在这个“自调用”的过程中,必须要有一个变化的“参数”,当这个“参数”达到你的期望值的时候,终止该“自调用”过程例举下面这个php程序,为了方便楼主好理解,特以描叙Linux目录3级递归结构为例,希望对你有所帮助。<? //递归 三级目录结构$arr = array( array('id'=>1,'city_name'=>'/','rel_id'=>'根目录','pid'=>0), array('id'=>2,'city_name'=>'/home','rel_id'=>'用户目录','pid'=>1), array('id'=>3,'city_name'=>'/home/www','rel_id'=>'www用户家目录','pid'=>2), array('id'=>4,'city_name'=>'/home/guest','rel_id'=>'guest用户家目录','pid'=>2), array('id'=>5,'city_name'=>'/usr','rel_id'=>'应用程序和文件目录','pid'=>1), array('id'=>6,'city_name'=>'/usr/doc','rel_id'=>'Linux文档','pid'=>5), array('id'=>7,'city_name'=>'/usr/bin','rel_id'=>'众多应用程序','pid'=>5));function fn_findall( $pid ){ global $arr; $__arr = array();//array(0,...) foreach ( $arr as $k=>$v ) { if( $v['pid']==$pid ){ $__arr[] = $v; //array(0,$v) } } return $__arr; }function fn_catelog($pid=0){ $__arr = array();//array(0=>) $__arr = fn_findall($pid); //array(0=>array(5)) if( !empty($__arr) ){ //empty -- 检查$__arr变量是否为空 foreach ( $__arr as $k=>$v ) { $__arr[$k]['subclass'] = fn_catelog($v['id']); } } return $__arr;}$fn=fn_catelog(0);var_dump($fn);?>函数fn_catelog($pid=0)内部又有调用函数fn_catelog($v['id']),已经构成了“自调用”,且$pid有一个期望值,不满足(!empty(__arr))条件时,则不会执行foreach循环体。 function a(){b();}function b(){a();}就如此简单,但是你得让他能跳出来,不然就死循环了. php关于gd2库的问题 校验权限时,是读SESSION好还是读数据库好? checkbox 的值写入数据库后,如何访问 php截取中文有什么好方法?有时候出现乱码。。 想学习pear,大家给点意见 关于require的问题,我才学php大家帮帮我啊!~ 这句话有错误么?怎么老说错了 请问如何用在php.net下载的patch把老版本php更新到最新版本 中文 用javascript的escape()编码后,php怎么还原?? apache 的配置,请教如何增加一个虚拟主机 私人调试函数求优化 咨询php开发windows服务的小问题
在这个“自调用”的过程中,必须要有一个变化的“参数”,当这个“参数”达到你的期望值的时候,终止该“自调用”过程
例举下面这个php程序,为了方便楼主好理解,特以描叙Linux目录3级递归结构为例,希望对你有所帮助。<? //递归 三级目录结构
$arr = array(
array('id'=>1,'city_name'=>'/','rel_id'=>'根目录','pid'=>0),
array('id'=>2,'city_name'=>'/home','rel_id'=>'用户目录','pid'=>1),
array('id'=>3,'city_name'=>'/home/www','rel_id'=>'www用户家目录','pid'=>2),
array('id'=>4,'city_name'=>'/home/guest','rel_id'=>'guest用户家目录','pid'=>2),
array('id'=>5,'city_name'=>'/usr','rel_id'=>'应用程序和文件目录','pid'=>1),
array('id'=>6,'city_name'=>'/usr/doc','rel_id'=>'Linux文档','pid'=>5),
array('id'=>7,'city_name'=>'/usr/bin','rel_id'=>'众多应用程序','pid'=>5)
);
function fn_findall( $pid ){
global $arr;
$__arr = array();//array(0,...)
foreach ( $arr as $k=>$v )
{
if( $v['pid']==$pid ){
$__arr[] = $v; //array(0,$v)
}
}
return $__arr;
}function fn_catelog($pid=0){
$__arr = array();//array(0=>)
$__arr = fn_findall($pid); //array(0=>array(5))
if( !empty($__arr) ){ //empty -- 检查$__arr变量是否为空
foreach ( $__arr as $k=>$v )
{ $__arr[$k]['subclass'] = fn_catelog($v['id']);
}
}
return $__arr;
}$fn=fn_catelog(0);
var_dump($fn);
?>函数fn_catelog($pid=0)内部又有调用函数fn_catelog($v['id']),已经构成了“自调用”,
且$pid有一个期望值,不满足(!empty(__arr))条件时,则不会执行foreach循环体。
b();
}
function b(){
a();
}就如此简单,但是你得让他能跳出来,不然就死循环了.