函數的遞歸呼叫
遞歸的含義
遞歸其實也只是一種演算法上的描述,不是一種新的語法!
有時候,我們解決問題的時候,會遇到這種情況,當我們把一個大的問題按照某種解決方案分成若干個小的問題的時候,發現這些小問題的解決方案其實和剛才大問題的解決方案又是一樣的!
典型的,例如:求階乘!
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><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

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
刺客信條陰影:貝殼謎語解決方案
1 個月前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
3 週前ByDDD
在哪裡可以找到原子中的起重機控制鑰匙卡
1 個月前ByDDD
如何修復KB5055523無法在Windows 11中安裝?
2 週前ByDDD
Inzoi:如何申請學校和大學
3 週前ByDDD

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver CS6
視覺化網頁開發工具

WebStorm Mac版
好用的JavaScript開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中