亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php遞歸函數三種實現方法及如何實現數字累加

2024-05-04 23:38:35
字體:
來源:轉載
供稿:網友
實現遞歸函數有哪些方法呢?如何用遞歸函數實現數字累加?這篇文章就主要介紹php遞歸函數三種實現方法及如何實現數字累加,需要的朋友可以參考下。
 

      遞歸函數在編程中是比較常用的一類函數,其特點是函數自身可以調用自身,但是必須在調用自身前有條件判斷,否則會導致無限調用下去。本文列出了三種遞歸函數實現方法,第一種利用引用做參數,第二種利用全局變量,第三種利用靜態變量,理解此類問題需要有點基礎,包括對全局變量,引用,靜態變量的理解,也需對他們的作用范圍有所理解。在這不廢話了,具體介紹請看下文。

第一種方法:利用引用做參數

  先不管引用做不做參數,必須先明白引用到底是什么?引用不過是指兩個不同名的變量指向同一塊存儲地址。本來每個變量有各自的存儲地址,賦值刪除各行其道。

現在可好,兩個變量共享一塊存儲地址。 $a=&$b; 。實際上指的是 $a 不管不顧自己原來的存儲地址,非要和 $b 共享一室了。因而任何對存儲地址數值的改變都會影響兩個值。  

  函數之間本來也是各行其是,即便是同名函數。遞歸函數是考慮將引用作為參數,成為一個橋梁,形成兩個函數間的數據共享。雖然兩個函數見貌似操作的是不同地址,但是實際上操作的是一塊兒內存地址。

 

復制代碼代碼如下:

function test($a=0,&$result=array()){
$a++;
if ($a<10) {
    $result[]=$a;
    test($a,$result);
}
echo $a;
return $result;
}

 

  上面的例子非常簡答,以a<10作為判斷條件,條件成立,則把a賦給result[];將result的引用傳入函數,會將每一次遞歸產生的a添加到結果數組result。因而本例生成的$result數組是 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 ) 。

        本例比較有意思的是echo a 的值。相信很多人認為是12345678910吧,其實不然,是1098765432。為什么呢?因為函數還沒執行echo a前就進行了下一次的函數遞歸。

        真正執行echo a是當a<10條件不滿足的時候,echo a,返回result,對于上一層而言,執行完遞歸函數,開始執行本層的echo $a,依次類推。

第二種方法:利用全局變量

  利用全局變量完成遞歸函數,請確保你確實理解什么是全局變量。global在函數內申明變量不過是外部變量的同名引用。變量的作用范圍仍然在本函數范圍內。改變這些變量的值,外部同名變量的值自然也改變了。但一旦用了&,同名變量不再是同名引用。利用全局變量實現遞歸函數沒必要理解到這么深的一層,還保持原有對全局變量的看法就可以順理成章理解遞歸函數。

 

復制代碼代碼如下:

function test($a=0,$result=array()){
    global $result;
    $a++;
    if ($a<10) {
        $result[]=$a;
        test($a,$result);
    }
    return $result;
}

 

第三種方法:利用靜態變量

  我們常常在類中見到static,今天我們把它利用到遞歸函數中。請記住static的作用:僅在第一次調用函數的時候對變量進行初始化,并且保留變量值。

  舉個栗子:

 

復制代碼代碼如下:

function test(){
static $count=0;
echo $count;
$count++;
}
test();
test();
test();
test();
test();
  

 

        請問這一段代碼的執行結果是多少?是00000么?必然不是。是01234。首先第一次調用test(),static對 $count 進行初始化,其后每一次執行完都會保留 $count 的值,不再進行初始化,相當于直接忽略了 static $count=0; 這一句。

  因而將static應用到遞歸函數作用可想而知。在將需要作為遞歸函數間作為“橋梁"的變量利用static進行初始化,每一次遞歸都會保留"橋梁變量"的值。

 

復制代碼代碼如下:

function test($a=0){
    static $result=array();
    $a++;
    if ($a<10) {
        $result[]=$a;
        test($a);
    }
    return $result;
}
 
 

 

 總結

  所謂遞歸函數,重點是如何處理函數調用自身是如何保證所需要的結果得以在函數間合理"傳遞",當然也有不需要函數之間傳值得遞歸函數,例如:

 

復制代碼代碼如下:

function test($a=0){
    $a++;
    if ($a<10) {
        echo $a;

        test($a);
    }
}

 

  下面通過一段代碼演示一下php使用遞歸函數實現數字累加的方法。

代碼如下所示:

 

復制代碼代碼如下:

<?php
function summation ($count) {
   if ($count != 0) :
     return $count + summation($count-1);
   endif;
}
$sum = summation(10);
print "Summation = $sum";
?>

 

         面對php遞歸函數,不必要傷腦筋,深入的理解變量引用相關知識對解決此類問題很有幫助,以上內容就是php遞歸函數三種實現方法及如何實現數字累加的全部內容,希望對大家今后的學習有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国内精品久久| 国产精品美女999| 日韩国产欧美精品在线| 久久久久久久久久久国产| 日韩精品久久久久久久玫瑰园| 午夜精品视频在线| 国产欧洲精品视频| 亚洲毛片在线观看| 久久精品人人爽| 精品久久久中文| 清纯唯美日韩制服另类| 久久av在线播放| 欧美多人爱爱视频网站| 992tv在线成人免费观看| 日韩精品免费在线播放| 欧美日韩福利在线观看| 九九视频这里只有精品| 2023亚洲男人天堂| 国产精品永久免费在线| 日韩精品中文字幕久久臀| 成人黄色免费在线观看| 91精品一区二区| 欧美日韩国产精品一区| 日韩av免费一区| 国产日韩精品一区二区| 欧美精品激情视频| xxxx性欧美| 亚洲美女动态图120秒| 亚洲激情视频在线观看| 国产欧美久久一区二区| 亚洲第一视频在线观看| 亚洲综合精品伊人久久| 日韩精品电影网| 在线亚洲国产精品网| 色爱精品视频一区| 国产精品亚洲欧美导航| 久久久噜久噜久久综合| 欧美综合在线第二页| 日韩最新av在线| 国产精品综合不卡av| 成人黄色午夜影院| 亚洲色图在线观看| 亚洲第一精品夜夜躁人人爽| 亚洲精品国产精品国自产观看浪潮| 在线国产精品视频| 精品视频在线导航| 欧美肥婆姓交大片| 久久综合伊人77777蜜臀| 亚洲国产精品美女| 亚洲日韩中文字幕| 日本亚洲欧美三级| 国产91热爆ts人妖在线| 亚洲精品不卡在线| 久久久在线视频| 欧美激情在线有限公司| 亚洲国产成人在线播放| 日韩成人激情在线| 亚洲高清不卡av| 欧美黄色成人网| 日韩hd视频在线观看| 久久91超碰青草是什么| 亚洲色图在线观看| 2021国产精品视频| 国产一区二区三区毛片| 国产精品麻豆va在线播放| 精品国产1区2区| 亚洲男人的天堂网站| 欧美午夜无遮挡| 亚洲第一福利网站| 日韩在线观看免费全集电视剧网站| 亚洲欧美国产制服动漫| 国产精品99久久久久久久久| 日韩精品在线免费观看| 欧美激情精品久久久久| 欧美中文字幕在线观看| 国产成人精品在线| 国产精品88a∨| 91精品国产高清| 超碰91人人草人人干| 国产精品大陆在线观看| 国产成人在线亚洲欧美| 久久精品国产欧美亚洲人人爽| 欧美午夜精品久久久久久人妖| 国产精品美腿一区在线看| 韩国国内大量揄拍精品视频| 亚洲最新视频在线| 粗暴蹂躏中文一区二区三区| 亚洲美女精品久久| 国产精品91在线| 欧美极品少妇xxxxⅹ裸体艺术| 欧美大片第1页| 久久亚洲精品毛片| 91福利视频在线观看| 成人情趣片在线观看免费| 日韩成人在线观看| 亚洲男人的天堂在线播放| 亚洲自拍偷拍网址| 精品国产精品自拍| 久久久久久久久国产精品| 久久久久亚洲精品成人网小说| 精品一区二区电影| 久久综合网hezyo| 国产aaa精品| 国产精品jvid在线观看蜜臀| 亚洲v日韩v综合v精品v| 久久天天躁狠狠躁夜夜爽蜜月| 久久久噜噜噜久久久| 亚洲欧洲激情在线| www.日韩免费| 91精品久久久久久久久不口人| 国产精品丝袜白浆摸在线| 成人乱人伦精品视频在线观看| 亚洲色图欧美制服丝袜另类第一页| www.欧美免费| 高清一区二区三区四区五区| 欧美日韩成人在线观看| 久久综合久久八八| 国产精品视频白浆免费视频| 精品国偷自产在线| 国产在线拍偷自揄拍精品| 久久久91精品| 国产精品吊钟奶在线| 国产精品ⅴa在线观看h| 欧美日韩亚洲一区二区三区| 日韩在线视频导航| 不卡伊人av在线播放| 米奇精品一区二区三区在线观看| 日韩高清av在线| 欧美久久精品一级黑人c片| 久热在线中文字幕色999舞| 欧美精品video| 国内外成人免费激情在线视频网站| 欧美日韩视频在线| 欧美裸体xxxx极品少妇软件| 亚洲精品国产精品国产自| 欧美国产精品人人做人人爱| 午夜精品一区二区三区在线视频| 国产美女高潮久久白浆| 91精品在线一区| 亚洲欧美在线x视频| 欧美国产亚洲视频| 夜夜嗨av一区二区三区免费区| 欧美成人在线免费| 亚洲精品有码在线| 91精品久久久久久久久久久| 国产精品黄页免费高清在线观看| 一区二区三欧美| 日韩av网站电影| 国产精品久久久久久久久久ktv| 38少妇精品导航| 中文字幕欧美日韩精品| 最近2019年中文视频免费在线观看| 欧美午夜视频在线观看| 亚洲三级av在线| 色综合亚洲精品激情狠狠| 亚洲国产精品va| 日韩欧美国产免费播放| 在线观看不卡av| 成人激情视频在线播放| 欧美日韩免费在线观看| 亚洲在线观看视频网站| 97视频免费在线观看| 国产精品美女久久久免费| 一区二区三区视频观看|