<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                遞歸函數,遞歸只是一個名字,而遞歸函數的規定:函數體內調用函數自己。 這需要一定的思維理解深度,本章學習過程當中,如果你實在是有思維無法跟上的地方,可以跳過本章不用學習。 因為,實際工作中,用遞歸有用到,但是使用量不會很大。遞歸在實際工作中主要是用在:文件和文件夾操作的時候有使用到。 解決辦法: 萬一你的思維跟不上本章,你可以直接了解本塊的原理后,用現成的文件和文件夾處理函數或文件處理類就可以。 我說幾個思維上的盲區: 1. 代碼是從上到下執行的,所有代碼沒有exit等停止符,函數必須執行完。 2. 如果函數從函數A跳至函數B后,必須把函數B執行完成再執行函數A余下的代碼。 3. 遞歸函數必須要能執行完有結束條件,不然函數就會限入死循環。函數會永遠的自我執行下去。 我們來寫一代碼碼來理解一下: ~~~ <?php $num = 10; //調用一次函數A(); A($num); function A( $arg ){ echo $arg; //在函數A里面去,跑去執行函數B去了 B($arg); echo '我們需要不斷的努力,努力到上天都為我們感動'; echo $arg.'<br />'; } function B( $number ){ echo $number; echo '俺是狗蛋,執行完了<br />'; } ?> ~~~ 通過上例大家會發現: 1. 執行函數A到一半的時候,跑去執行了函數B 2. 執行完函數B,先顯示出來的是:“俺是狗蛋,執行完了”,接著顯示的才是:“我們需要不斷的努力,努力到上天都為我們感動” 3. 也就是證明了我們所說思維盲區里面的內容,代碼從上到下執行,代碼必須執行完。 我們來寫一個簡單的遞歸代碼,讓函數自己調用自己。 ~~~ <?php $n = 2; function dg( $n ){ echo $n.'<br />'; $n = $n - 1; if($n > 0){ //在函數體內調用了dg自己喲 dg($n); }else{ echo '--------------'; } echo '俺是狗蛋,俺還沒執行' . $n . '<br />'; } dg($n); ?> ~~~ 你猜猜顯示結果是什么?為什么這樣? 我們來仔細推理一次: 1. 第一次調用dg(),將數字$n = 2傳到dg中,先顯示出來了2 2. 然后將$n - 1 $n的值為了1 3. 接著判斷$n 是否大于0,肯定是大于0的,所以調用遞歸自己,再把自己執行一次。 4. 而第二次在執行自己dg()的時候,而最下面的 **echo '俺是狗蛋,俺還沒執行' . $n . '<br />';** 還沒有執行到。等待執行完成后再來執行 5. $n此時等于1 ,所以顯示出來1。 6. $n把自己減了一次,$n的結果為0 7. $n大于0肯定不成立的,所以顯示了一條:"--------------" 8. 而這個時候該執行:echo '俺是狗蛋,俺還沒執行' . $n . '<br />'; 9. 第二次執行dg()執行完成。第一次dg()的代碼還沒執行完,將第4點中的余下代碼執行完。 上面的,我們就將運行結果推導完了,我們接下來,看看效果: ![document/2015-08-16/55d03fa56b605](http://box.kancloud.cn/document_2015-08-16_55d03fa56b605.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看