溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php遞歸函數(shù)是什么

發(fā)布時(shí)間:2021-03-23 10:03:18 來(lái)源:億速云 閱讀:198 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)php遞歸函數(shù)是什么,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

遞歸就是一個(gè)函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。遞歸函數(shù)必須有結(jié)束條件。 下面跟著小編一起來(lái)學(xué)習(xí)遞歸吧。

遞歸思想就是,把一個(gè)相對(duì)復(fù)雜的問題(原始問題)轉(zhuǎn)化為一個(gè)個(gè)與原問題相似的規(guī)模較小的問題(子問題)來(lái)解決,等一個(gè)個(gè)小問題解決了,最終的大問題自然就解決了。遞歸方法只需少量的程序就可描述出解題過程所需要的多次重復(fù)計(jì)算,大大減少程序的代碼量。當(dāng)然,遞歸函數(shù)也不完美,有一定的缺點(diǎn),那就是遞歸函數(shù)的運(yùn)行效率不高。
在 PHP 中遞歸層數(shù)也不是沒有限制的,這與程序的內(nèi)存限額有關(guān),PHP5 允許一個(gè)程序使用 128M 的內(nèi)存,因此當(dāng)遞歸層數(shù)過大導(dǎo)致 128M 內(nèi)存耗盡時(shí),程序就會(huì)產(chǎn)生一個(gè)致命錯(cuò)誤并退出。PHP7 允許使用 256M 的內(nèi)存。

遞歸函數(shù)就是在函數(shù)內(nèi)部自己調(diào)用自己。執(zhí)行遞歸函數(shù)將反復(fù)調(diào)用其自身,每調(diào)用一次就進(jìn)入新的一層。遞歸函數(shù)必須有結(jié)束條件。當(dāng)函數(shù)在一直遞推,直到遇到墻后返回,這個(gè)墻就是結(jié)束條件。所以遞歸要有兩個(gè)要素,結(jié)束條件與遞推關(guān)系。

注:函數(shù)在被調(diào)用執(zhí)行的過程中會(huì)在內(nèi)存里面分配空間用于存儲(chǔ)臨時(shí)數(shù)據(jù),那么函數(shù)在執(zhí)行過程中默認(rèn)之間是沒有聯(lián)系的(除了靜態(tài)變量,按引用傳,全局變量)。里面的變量默認(rèn)都是局部變量,相互之間沒有影響。我們來(lái)看一個(gè)例子加深印象:

<?php
    function demo($num){
        //
        if($num == 1 || $num == 2){
            return 1;
        }else{
            return demo($num - 1) + demo($num - 2);
        }
    }

    echo '數(shù)列第 10 位是:'.demo(10);//數(shù)列第 10 位是:55
?>

這個(gè)例子是不是有點(diǎn)眼熟,這就是斐波那契數(shù)列,我們計(jì)算斐波那契數(shù)列的時(shí)候,如果使用其他方法相較而言還是有一定難度的,但是使用遞歸函數(shù),效率就高了很多。

關(guān)于“php遞歸函數(shù)是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI