什么叫遞歸?
舉一個通俗的例子:
有一個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).最終切成的每一小份也就是要求的解。
function cutApple($w,$t){ if($w 1){ echo 已經切完了 else{ echo 第 .$t. 次切割,每份重量是: .($w/2). br $t+=1; cutApple($w/2,$t);}
結果:
第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){ if(!is_int($n)||!is_int($m)) return false; html' target='_blank'>static $sum=0; $sum+=$n; $n++; if($n $m) return $sum; return add($n,$m);echo add(1,100);
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
PHP如何動態修改配置文件
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答