递归方法的简单实例

来源:互联网 发布:seo和sem 编辑:程序博客网 时间:2024/05/19 23:12
 

         下面的实例是简单的实现目录大小,其中用到了比较常见的递归函数

<?php
function dirSize($directory){   //自定义一个函数dirSize(),统计传入参数的目录的大小
$dir_size=0;  //初始化
if($dir_handle=opendir($directory)){                   //判断目录是否能够成功打开
  while ($filename=readdir($dir_handle)){               //循环遍历目录下的所有文件
   if($filename!="." && $filename !=".."){              //排除两个特殊的目录
    $subFile=$directory."/".$filename;                 //将目录下的子文件和当前目录相连
    if(is_dir($subFile))                                         //判断文件名是不是一个目录
    $dir_size+=dirSize($subFile);                      //递归的调用自身函数,求子目录的大小
    if(is_file($subFile))                                      //判断文件名是不是一个文件
    $dir_size+=filesize($subFile);                    //求出文件的大小并累加
   }
   
  }
  closedir($dir_handle);                           //逐级关闭文件资源
  return $dir_size;                                 //返回计算后的目录的大小
}
}
$dir_size=dirSize("phpMyAdmin");          //传参数,输入目录地址
echo round($dir_size/pow(1024,1),2)."KB";    //KB输出目录的大小
?>

递归函数的实现过程:

假如目录dir下有dir11.txt2.txt,目录dir1下有文件3.txt4.txt
dir参数传入到函数时,函数判断dir目录下是否含有目录,如果有,就进入其目录下。首先,dir1是个目录,函数判断dir1是目录,并将指针指向下一个文件,下一个文件是1.txt。然后函数就会返回并将dir1参数传入到函数,函数再判断dir1下是否有目录,显然dir1文件下没有目录,只有文件3.txt4.txt。函数开始循环遍历dir1目录下所有文件并累加文件的大小。当指针指向4.txt下一个时,因为没有,程序不再循环并执行closedir()关闭资源,及关闭了dir1目录的资源。由于整个dir还没有运行完,函数执行完dir1下的目录并关闭资源后开始运行当初指针指向的下一个文件1.txt。然后是2.txt。当指针指向2.txt下一个时,没有文件,函数循环结束。关闭dir目录资源。当整个目录就运行完了,函数及通过累加的方法获得了所有文件的大小(整个目录的大小)。这样就实现了整个递归函数的调用。

原创粉丝点击