1、递归思想
递归思想:把一个相对复杂的问题转化为一个与原问题相似的规模较小的问题来求解。比如:求n的阶乘n!=n*(n-1)!。
递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。但在带来便捷的同时,也会有一些缺点,即:通常用递归方法的运行效率不高。
2、递归实现的条件
确定递归公式;
确定递归边界条件(递归出口),否则会出现死循环。
3、递归遍历phpMyAdmin目录下所有条目
//实例:递归显示phpMyAdmin目录中所有条目
/*
分析过程:
(1)函数递归:递归是通过函数调用自己来实现
(2)操作顺序:打开目录——读取所有条目
(3)递归条件:如果它是目录,则递归调用,即打开目录——读取目录条目
(4)关闭目录
*/
function show_all_files($dir){
//打开目录:返回目录句柄资源
$handle = opendir($dir);
echo "
";
//循环读取目录中所有条目
while($line = readdir($handle))
{
//如果是'.'或'..',则跳过
if($line=='.' || $line=='..')
{
continue; //中止本次循环,开始下一次循环
//本次循环的剩余代码不再执行
}
echo "
- $line
";
//如果中文显示乱码,则需要使用iconv函数转码
//echo "
- ".iconv("utf-8","utf-8",$line)."
";
//如果当前条目是目录,则递归调用:phpMyAdmin/js
if(is_dir($dir."/".$line)) //退出递归的条件
{
show_all_files($dir."/".$line);
}
}
echo "
";
//关闭目录
closedir($handle);
}
//调用函数
show_all_files("./phpMyAdmin");
综合实例:递归删除phpMyAdmin目录
//实例:递归删除phpMyAdmin目录
function del_all_files($dir) {
//打开目录
$handle = opendir($dir);
//循环读取所有条目
while($line = readdir($handle)) {
//如果是'.'或'..',则跳过
if($line=='.' || $line=='..')
{
continue;
}
//判断是文件,还是目录
if(is_dir($dir."/".$line))
{
//递归调用
del_all_files($dir."/".$line);
}else{
//如果是文件,直接删除
unlink($dir."/".$line);
}
}
//关闭目录
closedir($handle);
//删除目录
rmdir($dir);
}
//调用函数
del_all_files("./phpMyAdmin");