>  기사  >  php教程  >  재귀의 일부 응용 (1) 폴더 탐색

재귀의 일부 응용 (1) 폴더 탐색

WBOY
WBOY원래의
2016-08-08 08:49:471265검색

함수 재귀 호출

재귀의 의미

재귀는 실제로 새로운 구문이 아니라 단지 알고리즘 설명일 뿐입니다!

때때로 우리는 문제를 해결하다 보면 이런 상황에 직면하게 됩니다. 큰 문제를 특정한 해결책에 따라 여러 개의 작은 문제로 나누면, 이러한 작은 문제에 대한 해결책이 실제로는 지금과 같다는 것을 알게 됩니다. 큰 문제는 또 똑같습니다!

일반적인 예: 계승을 찾아보세요!

10! = 10 * 9!

9! = 9 * 8!

8! = 8 * 7!

……

구문적으로 말하면 함수의 재귀 호출은 함수가 실행 중에 자신을 호출한다는 의미입니다!

재귀의 두 가지 중요한 점:

1, 재귀 종료: 재귀 호출을 중지하는 시점을 나타냅니다.

2, 재귀 지점: 재귀 호출을 사용하기 시작하는 시점을 나타냅니다.

재귀 호출 작성 시 재귀 종료를 먼저 작성한 다음 재귀 지점을 작성하세요!

그래서 재귀 호출의 특징은 코드 작성이 상대적으로 간단하지만 실행되면 더 많은 메모리 리소스를 소비한다는 것입니다!

재귀의 본질은 공간과 시간을 교환하는 것이라고 할 수도 있어요!

다음은 폴더를 재귀적으로 순회하는 작은 사례입니다.

코드:

<?<span style="color: #000000;">php 
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
 * 定义遍历指定路径下文件与文件夹,通过递归的方法
 * @param  $dir string
 </span><span style="color: #008000;">*/</span><span style="color: #000000;">
function dirs($dir,$level</span>=<span style="color: #800080;">0</span><span style="color: #000000;">){
    </span><span style="color: #008000;">//</span><span style="color: #008000;">列出指定路径中的文件和目录</span>
    $files=<span style="color: #000000;">scandir($dir);

    </span><span style="color: #008000;">//</span><span style="color: #008000;">遍历所有的目录</span>
    <span style="color: #0000ff;">foreach</span>($files <span style="color: #0000ff;">as</span><span style="color: #000000;"> $file){

        </span><span style="color: #008000;">//</span><span style="color: #008000;">重复一个字符串</span>
        echo str_repeat(<span style="color: #800000;">'</span><span style="color: #800000;"> </span><span style="color: #800000;">'</span>,$level*<span style="color: #800080;">4</span><span style="color: #000000;">);

        </span><span style="color: #008000;">//</span><span style="color: #008000;">拼接路径</span>
        $tmpdir=$dir.<span style="color: #800000;">'</span><span style="color: #800000;">/</span><span style="color: #800000;">'</span><span style="color: #000000;">.$file;

        </span><span style="color: #008000;">//</span><span style="color: #008000;">判断是否是一个目录,文件夹</span>
        <span style="color: #0000ff;">if</span><span style="color: #000000;">(is_dir($tmpdir)){
            </span><span style="color: #008000;">//</span><span style="color: #008000;">让文件夹变成红色</span>
            echo <span style="color: #800000;">"</span><span style="color: #800000;"><font style='color:red;'>$tmpdir</font><br/><span style="color: #800000;">"</span><span style="color: #000000;">;
            </span><span style="color: #008000;">//</span><span style="color: #008000;">目录下有两个隐藏文件.和..,排除掉</span>
            <span style="color: #0000ff;">if</span>($file !=<span style="color: #800000;">'</span><span style="color: #800000;">.</span><span style="color: #800000;">'</span> && $file !=<span style="color: #800000;">'</span><span style="color: #800000;">..</span><span style="color: #800000;">'</span><span style="color: #000000;">){
                </span><span style="color: #008000;">//</span><span style="color: #008000;">通过递归的方法,调用自己,进行遍历</span>
                dirs($tmpdir,$level+<span style="color: #800080;">1</span>);<span style="color: #008000;">//</span><span style="color: #008000;">递归点</span>
<span style="color: #000000;">            }
        }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{
            </span><span style="color: #008000;">//</span><span style="color: #008000;">如果不是一个目录就直接显示这个文件</span>
            echo $file.<span style="color: #800000;">'</span><span style="color: #800000;"><br/></span><span style="color: #800000;">'</span><span style="color: #000000;">;
        }

    }
}

dirs(</span><span style="color: #800000;">'</span><span style="color: #800000;">d:/sphinx</span><span style="color: #800000;">'</span>);

효과:

다음 글에서는 재귀적 방법을 사용하여 작은 경우의 무한 분류를 구현해 보겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.