新手跪求高手讲解递归! 跪求高手支教如何理解递归! 解决方案 » 免费领取超大流量手机卡,每月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();}就如此简单,但是你得让他能跳出来,不然就死循环了. 留言板被发布乱七八糟的代码 模拟登陆sohu邮箱,总是跳到手机邮箱链接 用什么开发工具好呢?Notepad++?Vim? 请教submit插入innerHTML apache在配置php时无法启动了 急! 蔡鸟求救usort函数 php手册上的这个函数的例子我看不懂 请前辈们告诉我他是如何运行的 不知道为什么 关于php数组排序的问题? 帮我解答一下基础的问题 请问如何知道网卡的mac地址? 私人调试函数求优化 咨询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();
}就如此简单,但是你得让他能跳出来,不然就死循环了.