第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

淺談PHP移動(dòng)函數(shù):遞歸思想實(shí)現(xiàn)

標(biāo)簽:
PHP

下面简单谈谈PHP函数递归思想的实现:

<?php
//复制函数
function cp($source,$dest){
//  如果$source不是目录,用copy就可以移动,不需要函数
    if(!is_dir($source)) return false;
//  判断$dest存在不,不存在就创建一个
    is_dir($dest)||mkdir($dest,0777,true);
    foreach (glob($source.'/*') as $v) {
        $newDest = $dest . '/' . basename($v);
/*      echo '<pre>';
        print_r($v);
        echo '</br>';
        print_r($dest);
        echo '</br>';
        print_r($newDest);
        echo '</pre>';*/
        is_dir($v)?cp($v,$newDest):copy($v, $newDest);
    }
    return true;
}
//删除函数
function del($source){
//  不是目录用unlink删除
    if(!is_dir($source)) return false;
    foreach (glob($source.'/*') as $v) {
        is_dir($v)?del($v):unlink($v);
    }
    return rmdir($source);
}
//移动函数
function move($source,$dest){
    cp($source, $dest);
    del($source);
}
//调用函数
move('./tt', './2222/tt');
?>

【编外】什么是递归函数?

递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。

下面举个例子

<?php
function test($n){
echo $n." ";
if($n>0){
test($n-1);
}else{
echo "<-->";
}
echo $n." ";
}
test(10);
?>

大家首先思考一下,这个例子最终的输出结果是什么?

好,我们来看一下本函数输出的结果:

10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

怎么样,不知道这个结果是否跟大家设想的一样呢?

好,下面我一步一步来给大家讲解...

第一步,执行test(10),echo 10,然后因为10>0,执行test(9),后面还有没来得及执行的echo 10

第二步,执行test(9),echo 9,然后因为9>0,执行test(8),同样后面还有没来得及执行的 echo 9

第三步,执行test(8),echo 8,然后因为8>0,执行test(7),同样后面还有没来得及执行的 echo 8

第四步,执行test(7),echo 7,然后因为7>0,执行test(6),同样后面还有没来得及执行的 echo 7

第五步,执行test(6),echo 6,然后因为6>0,执行test(5),同样后面还有没来得及执行的 echo 6

...........

第十步,执行test(0),echo 0,此时0>0的条件不满足,不在执行test()函数,而是echo “<-->”,并且执行后面的 echo 0

10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

此时,输出的内容如上述显示的红色部分,此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行

也就是开始执行刚刚所有test()函数没来得及输出的最后一个echo

它的流程是这样子的:

在函数执行的第一到第十步,函数输出的的是绿色部分,红色部分还“没来及”输出,就该调用自己执行操作,依次类推,直到流程执行到不再满足调用自己的条件,输出“<-->”,此时,流程该执行前面“没来及”输出的代码。

就像我们平时玩的游戏一样,打死一个怪物,掉出一个宝贝,但是还有其他怪物在等着你来消灭,你不得不消灭完所有的怪物才能回来一个一个地拾宝贝。

怎么样,这么样跟大家来讲解是不是明白了呢?
有的同学又会问了,我在执行完所有的test函数之后,最终输出0

也就是输出到这里,

10 9 8 7 6 5 4 3 2 1 0 <--> 0

那为什么下一个输出的是 1 ,而不是 10 呢,

对于这个问题,为了帮助大家理解,下面我再给大家举一个例子:

看如下代码:

<?php
function one($num){
echo $num;
two($num-1);
echo $num;
}
function two($num){
echo $num;
three($num-1);
echo $num;
}
function three($num){
echo $num;
}
one(3);
?>

以上代码对test()函数进行分解操作,我们思考:

执行one(3)函数的时候,同test()函数一样,首先要输出3,然后调用two(2)函数,

注意,此时还没有输出下面的3,

接着走,执行two(2)函数,输出2,调用three(1)函数,同样,这里没有来得及输出下面的2,

执行three(1),直接输出1,不在调用其它函数,

此时,我们想刚刚的two()函数是不是还没有执行完,好,接着执行two()函数没有完成的部分,two()函数执行完之后,也就是输出下面的2,然后开始执行one()函数没有执行完的部分,也就是输出下面的3,此时所有函数执行完毕。

那么,输出结果是:

3 2 1 2 3

怎么样,大家这样理解起来是不是会容易些呢?

點(diǎn)擊查看更多內(nèi)容
10人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消