zoukankan      html  css  js  c++  java
  • 递归的一些应用(一)遍历文件夹

    函数的递归调用

    递归的含义

    递归其实也只是一种算法上的描述,不是一种新的语法!

    有时候,我们解决问题的时候,会遇到这种情况,当我们把一个大的问题按照某种解决方案分成若干个小的问题的时候,发现这些小问题的解决方案其实和刚才大问题的解决方案又是一样的!

    典型的,比如:求阶乘!

    10! = 10 * 9!

    9! =  9 * 8!

    8! = 8 * 7!

    ……

    语法上,函数的递归调用,就是函数在执行的过程中自己又调用自己

    递归的两个要点:

    1,  递归的出口:就是指什么时候停止递归调用

    2,  递归点:就是指什么时候开始使用递归调用

    在写递归调用的时候,先写递归的出口,再写递归点!

    所以,递归调用的特点是:代码书写比较简单,但是执行的时候,比较消耗内存资源

    也可以说,递归的本质就是以空间换取时间

    下面是通过递归遍历文件夹的一个小案例:

    代码:

    <?php 
    /**
     * 定义遍历指定路径下文件与文件夹,通过递归的方法
     * @param  $dir string
     */
    function dirs($dir,$level=0){
        //列出指定路径中的文件和目录
        $files=scandir($dir);
    
        //遍历所有的目录
        foreach($files as $file){
    
            //重复一个字符串
            echo str_repeat('&nbsp;',$level*4);
    
            //拼接路径
            $tmpdir=$dir.'/'.$file;
    
            //判断是否是一个目录,文件夹
            if(is_dir($tmpdir)){
                //让文件夹变成红色
                echo "<font style='color:red;'>$tmpdir</font><br/>";
                //目录下有两个隐藏文件.和..,排除掉
                if($file !='.' && $file !='..'){
                    //通过递归的方法,调用自己,进行遍历
                    dirs($tmpdir,$level+1);//递归点
                }
            }else{
                //如果不是一个目录就直接显示这个文件
                echo $file.'<br/>';
            }
    
        }
    }
    
    dirs('d:/sphinx');

    效果:

    下篇我会用递归的方法来实现无限极分类的小案例。

    进击的qing
  • 相关阅读:
    POJ 2112 Optimal Milking (Floyd+二分+最大流)
    hdu5444 Elven Postman
    hdu5442 Favorite Donut
    hdu5437 Alisha’s Party
    hdu5433 Xiao Ming climbing
    hdu5432 Pyramid Split
    Codeforces Round #316 (Div. 2) C. Replacement
    hdu5396 Expression
    hdu3506 Monkey Party
    hdu3516 Tree Construction
  • 原文地址:https://www.cnblogs.com/qingfj/p/5742893.html
Copyright © 2011-2022 走看看