什么叫遞歸?
舉一個(gè)通俗的例子:
有一個(gè)8倆重的蘋果要你切成重量相等的若干份,每一份的重量不能大于1倆。你肯定會(huì)想到這樣做:
1.第一刀先把一個(gè)蘋果切成重量均等的2份A1和A2;
2.再把其中的一份A1切成重量均等的兩份A11和A12, 把A2切成均等的兩份A21和A22;
3.把A11切成均等的兩份……
4.直到每一小份都小于等于1倆為止。
以上的例子就是遞歸一個(gè)模型,把一個(gè)大的事物化成若干個(gè)小的事物,每一次使用的方法都相同。
程序自身調(diào)用自身的編程技巧稱為遞歸( recursion)。遞歸有直接遞歸和間接遞歸
?直接遞歸:函數(shù)在執(zhí)行過(guò)程中調(diào)用本身。
?間接遞歸:函數(shù)在執(zhí)行過(guò)程中調(diào)用其它函數(shù)再經(jīng)過(guò)這些函數(shù)調(diào)用本身。
遞歸有四個(gè)特性:
1.必須有可最終達(dá)到的終止條件,否則程序?qū)⑾萑霟o(wú)窮循環(huán);
2.子問(wèn)題在規(guī)模上比原問(wèn)題小,或更接近終止條件;
3.子問(wèn)題可通過(guò)再次遞歸調(diào)用求解或因滿足終止條件而直接求解;
4.子問(wèn)題的解應(yīng)能組合為整個(gè)問(wèn)題的解。
上面的例子中也滿足以上的四點(diǎn)性質(zhì):
(1).終止條件是每一份的重量不能大于1倆;(2).每一次切的大小都比上一次小;(3).每一次切的方式都相同,所以子問(wèn)題可遞歸調(diào)用;(4).最終切成的每一小份也就是要求的解。
function cutApple($w,$t){ if($w 1){ echo 已經(jīng)切完了 else{ echo 第 .$t. 次切割,每份重量是: .($w/2). br $t+=1; cutApple($w/2,$t);}
結(jié)果:
第1次切割,每份重量是:7.5
第2次切割,每份重量是:3.75
第3次切割,每份重量是:1.875
第4次切割,每份重量是:0.9375
已經(jīng)切完了
再舉一個(gè)通俗的例子:試求等差數(shù)列的和:1+2+3+4+...+98+100;
/** * 等差數(shù)列求和 * @param [int] $n [第一個(gè)數(shù)] * @param [int] $m [第二個(gè)數(shù)]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);
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP !
相關(guān)推薦:
PHP如何動(dòng)態(tài)修改配置文件
以上就是關(guān)于php中的遞歸分析的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選