舉乙個通俗的例子:
有乙個8倆重的蘋果要你切成重量相等的若干份,每乙份的重量不能大於1倆。你肯定會想到這樣做: 1.
第一刀先把乙個蘋果切成重量均等的2份a1和a2; 2.
再把其中的乙份a1切成重量均等的兩份a11和a12, 把a2切成均等的兩份a21和a22; 3.
把a11切成均等的兩份…… 4.
直到每一小份都小於等於1倆為止。
以上的例子就是遞迴乙個模型,把乙個大的事物化成若干個小的事物,每一次使用的方法都相同。
程式自身
呼叫自身的程式設計技巧稱為
遞迴( recursion)
。遞迴有直接遞迴和間接遞迴
•直接遞迴:函式在執行過程中呼叫本身。
•間接遞迴:函式在執行過程中呼叫其它函式再經過這些函式呼叫本身。
遞迴有四個特性: 1.
必須有可最終達到的終止條件,否則程式將陷入無窮迴圈; 2.
子問題在規模上比原問題小,或更接近終止條件; 3.
子問題可通過再次遞迴呼叫求解或因滿足終止條件而直接求解; 4.
子問題的解應能組合為整個問題的解。
上面的例子中也滿足以上的四點性質:
(1).
終止條件是
每乙份的重量不能大於1倆;(2).
每一次切的大小都比上一次小;
(3).
每一次切的方式都相同,所以子問題可遞迴呼叫;
(4).最終切成的每一小份也就是要求的解。
if($w<1)
else}
結果:
第1次切割,每份重量是:7.5
第2次切割,每份重量是:3.75
第3次切割,每份重量是:1.875
第4次切割,每份重量是:0.9375
已經切完了
再舉乙個通俗的例子:試求等差數列的和:1+2+3+4+...+98+100;
/**
* 等差數列求和
* @param [int] $n [第乙個數]
* @param [int] $m [第二個數]
*/function add($n,$m)
echo add(1,100);
PHP 遞迴效率分析
而且是差了3倍的效率。所以,php中的遞迴一定要小心的對待。最近寫了乙個快速排序的演算法,發現php中的遞迴效率不能一刀切,在各種不同的伺服器中,可能會表現不一樣。複製 如下 function qsort arr 採用遞迴演算法的快速排序。param array arr 要排序的陣列 param i...
php遞迴使用示例 php遞迴函式
遞迴獲得角色id字串 function exploderole roleobj,resultstr else exploderole childroleobj,resultstr 遞迴獲取級聯角色資訊陣列 function makerolerelation roleobjarr 程式設計客棧 通過父...
python 遞迴分析
這段時間用python寫了乙個爬衝指令碼,在抓取頁面採用廣度優先遍歷抓取。但是當遍歷到900多時就會出現莫名其妙的錯誤,通過pdb除錯發現是 runtimeerror maximum recursion depth exceeded 在網上查了,發現python預設的遞迴深度是很有限的,大概是900...