国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php自定義函數(shù)之遞歸函數(shù)

遞歸函數(shù),遞歸只是一個(gè)名字,而遞歸函數(shù)的規(guī)定:函數(shù)體內(nèi)調(diào)用函數(shù)自己。

這需要一定的思維理解深度,本章學(xué)習(xí)過(guò)程當(dāng)中,如果你實(shí)在是有思維無(wú)法跟上的地方,可以跳過(guò)本章不用學(xué)習(xí)。

因?yàn)?,?shí)際工作中,用遞歸有用到,但是使用量不會(huì)很大。遞歸在實(shí)際工作中主要是用在:文件和文件夾操作的時(shí)候有使用到。

解決辦法:
萬(wàn)一你的思維跟不上本章,你可以直接了解本塊的原理后,用現(xiàn)成的文件和文件夾處理函數(shù)或文件處理類(lèi)就可以。

我說(shuō)幾個(gè)思維上的盲區(qū):

????1.代碼是從上到下執(zhí)行的,所有代碼沒(méi)有exit等停止符,函數(shù)必須執(zhí)行完。

????2.如果函數(shù)從函數(shù)A跳至函數(shù)B后,必須把函數(shù)B執(zhí)行完成再執(zhí)行函數(shù)A余下的代碼。

????3.遞歸函數(shù)必須要能執(zhí)行完有結(jié)束條件,不然函數(shù)就會(huì)限入死循環(huán)。函數(shù)會(huì)永遠(yuǎn)的自我執(zhí)行下去。

我們來(lái)寫(xiě)一代碼碼來(lái)理解一下:

<?php

$num = 10;


//調(diào)用一次函數(shù)A();
A($num);



function A( $arg ){

   echo $arg;

   //在函數(shù)A里面去,跑去執(zhí)行函數(shù)B去了
   B($arg);


   echo '我們需要不斷的努力,努力到上天都為我們感動(dòng)';


   echo $arg.'<br />';
}

function B( $number ){

       echo $number;


       echo '俺是狗蛋,執(zhí)行完了<br />';

}


?>

通過(guò)上例大家會(huì)發(fā)現(xiàn):

????1.執(zhí)行函數(shù)A到一半的時(shí)候,跑去執(zhí)行了函數(shù)B

????2.執(zhí)行完函數(shù)B,先顯示出來(lái)的是:“俺是狗蛋,執(zhí)行完了”,接著顯示的才是:“我們需要不斷的努力,努力到上天都為我們感動(dòng)”

????3.也就是證明了我們所說(shuō)思維盲區(qū)里面的內(nèi)容,代碼從上到下執(zhí)行,代碼必須執(zhí)行完。

????我們來(lái)寫(xiě)一個(gè)簡(jiǎn)單的遞歸代碼,讓函數(shù)自己調(diào)用自己。

<?php

$n = 2;

function dg( $n ){

   echo $n.'<br />';

   $n = $n - 1;

   if($n > 0){
       //在函數(shù)體內(nèi)調(diào)用了dg自己?jiǎn)?       dg($n);

   }else{

       echo '--------------';
   }

   echo '俺是狗蛋,俺還沒(méi)執(zhí)行' . $n . '<br />';

}
?>

你猜猜顯示結(jié)果是什么?為什么這樣?

我們來(lái)仔細(xì)推理一次:

????1.第一次調(diào)用dg(),將數(shù)字$n = 2傳到dg中,先顯示出來(lái)了2

????2.然后將$n - 1 $n的值為了1

????3.接著判斷$n 是否大于0,肯定是大于0的,所以調(diào)用遞歸自己,再把自己執(zhí)行一次。

????4.而第二次在執(zhí)行自己dg()的時(shí)候,而最下面的?echo '俺是狗蛋,俺還沒(méi)執(zhí)行' . $n . '
';?還沒(méi)有執(zhí)行到。等待執(zhí)行完成后再來(lái)執(zhí)行

????5.$n此時(shí)等于1 ,所以顯示出來(lái)1。

????6.$n把自己減了一次,$n的結(jié)果為0

????7.$n大于0肯定不成立的,所以顯示了一條:"--------------"

????8.而這個(gè)時(shí)候該執(zhí)行:echo '俺是狗蛋,俺還沒(méi)執(zhí)行' . $n . '
';

????9.第二次執(zhí)行dg()執(zhí)行完成。第一次dg()的代碼還沒(méi)執(zhí)行完,將第4點(diǎn)中的余下代碼執(zhí)行完。


繼續(xù)學(xué)習(xí)
||
<?php $n = 2; function dg( $n ){ echo $n.'<br />'; $n = $n - 1; if($n > 0){ //在函數(shù)體內(nèi)調(diào)用了dg自己?jiǎn)? dg($n); }else{ echo '--------------'; } echo '俺是狗蛋,俺還沒(méi)執(zhí)行' . $n . '<br />'; } ?>
提交重置代碼