程式呼叫自身的程式設計技巧稱為遞回( recursion)。遞回做為一種演算法在程式設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的程式碼量。遞回的能力在於用有限的語句來定義物件的無限集合。一般來說,遞回需要有邊界條件、遞迴前進段和遞回返回段。當邊界條件不滿足時,遞迴前進;當邊界條件滿足時,遞回返回。
推薦教學:PHP視訊教學
遞回,就是在執行的過程中呼叫自己。
構成遞回需具備的條件:
函數巢狀呼叫過程範例
1. 子問題須與原始問題為同樣的事,且更為簡單;
2. 不能無限制地呼叫本身,須有個出口,化簡為非遞回狀況處理。
在數學和電腦科學中,遞回指由一種(或多種)簡單的基本情況定義的一類物件或方法,並規定其他所有情況都能被還原為其基本情況。
例如,下列為某人祖先的遞迴定義:
某人的雙親是他的祖先(基本情況)。某人祖先的雙親同樣是某人的祖先(遞回步驟)。斐波納契數列(Fibonacci Sequence),又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21..... I [1]
斐波納契數列是典型的遞迴案例:
遞回關係就是實體自己和自己建立關係。
Fib(0) = 1 [基本情況] Fib(1) = 1 [基本情況] 對所有n > 1的整數:Fib(n) = (Fib(n-1) + Fib(n-2)) [遞迴定義] 儘管有許多數學函數均可以遞迴表示,但在實際應用中,遞迴定義的高開銷往往會讓人望而卻步。例如:
階乘(1) = 1 [基本情況] 對所有n > 1的整數:階乘(n) = (n * 階乘(n-1)) [遞迴定義] 一種便於理解的心理模型,是認為遞迴定義對物件的定義是按照「先前定義的」同類物件來定義的。例如:你怎樣才能移動100個箱子?答案:你首先移動一個箱子,並記下它移動到的位置,然後再去解決較小的問題:你怎樣才能移動99個箱子?最終,你的問題將變為怎樣移動一個箱子,而這時你已經知道該怎麼做的。
如此的定義在數學中十分常見。例如,集合論對自然數的正式定義是:1是一個自然數,每個自然數都有一個後繼,這一個後繼也是自然數。
德羅斯特效應
德羅斯特效應是遞迴的一種視覺形式。圖中女性手持的物體中有一幅她本人手持同一物體的小圖片,進而小圖片中還有更小的一幅她手持同一物體的圖片,依此類推。
又例如,我們在兩面相對的鏡子之間放一根正在燃燒的蠟燭,我們會從其中一面鏡子裡看到一根蠟燭,蠟燭後面又有一面鏡子,鏡子裡面又有一根蠟燭……這也是遞迴的表現。
簡單應用
function loop(){ static $i = 0; echo $i.' '; $i++; if($i<10){ loop(); } } loop();//輸出 0 1 2 3 4 5 6 7 8 9
以上就是什麼是php遞回的詳細內容,更多請關注TW511.COM其它相關文章!