Heim  >  Artikel  >  php教程  >  Einige Anwendungen der Rekursion (1) Durchlaufen von Ordnern

Einige Anwendungen der Rekursion (1) Durchlaufen von Ordnern

WBOY
WBOYOriginal
2016-08-08 08:49:471265Durchsuche

Rekursiver Funktionsaufruf

Die Bedeutung der Rekursion

Rekursion ist eigentlich nur eine algorithmische Beschreibung, keine neue Syntax!

Wenn wir Probleme lösen, stoßen wir manchmal auf diese Situation. Wenn wir ein großes Problem entsprechend einer bestimmten Lösung in mehrere kleine Probleme aufteilen, stellen wir fest, dass die Lösungen für diese kleinen Probleme tatsächlich dieselben sind wie gerade Die Lösung Das große Problem ist wieder dasselbe!

Typisch, wie zum Beispiel: Fakultät finden!

10! = 10 * 9!

9! = 9 * 8!

8! = 8 * 7!

……

Syntaktisch bedeutet der rekursive Aufruf der -Funktion, dass sich die Funktion bei der Ausführung erneut aufruft!

Zwei wichtige Punkte der Rekursion:

1, Rekursiver Ausgang: Bezieht sich darauf, wann rekursive Aufrufe gestoppt werden sollen

2, Rekursionspunkt: bezieht sich darauf, wann mit der Verwendung rekursiver Aufrufe begonnen werden soll

Wenn Sie einen rekursiven Aufruf schreiben, schreiben Sie zuerst den rekursiven Ausgang und dann den rekursiven Punkt!

Die Merkmale rekursiver Aufrufe sind also: Der Code ist relativ einfach zu schreiben, aber wenn er ausgeführt wird, verbraucht er mehr Speicherressourcen!

Man kann auch sagen, dass das Wesen der Rekursion darin besteht, Raum gegen Zeit auszutauschen!

Das Folgende ist ein kleiner Fall des rekursiven Durchlaufens eines Ordners:

Code:

<?<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>);

Wirkung:

Im nächsten Artikel werde ich die rekursive Methode verwenden, um einen kleinen Fall einer unendlichen Klassifizierung zu implementieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn