php函數,結果很意外
黄舟
黄舟 2017-05-24 11:34:32
0
7
777
雷雷
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(7)
PHPzhong

函數的實現功能方面考慮,而不考慮回調過程來理解遞歸.
如果考慮回調過程來理解遞歸的話,就要分析整個遞歸過程中的參數和變量,還要記住什麼時候被呼叫函數呼叫回到主呼叫函數,就顯得有些麻煩.
對於一些常用的遞歸函數功能很好描述,如递归求解阶乘:

<?php

function factorial($n) {
    if ($n != 1)
        $res = $n * factorial($n-1);
    else
        $res = 1;
    return $res;
}

?>

函數函數就是: 计算 n 的阶乘, 函数功能实现就是: n 的阶乘 = n * (n-1)的阶乘.這樣理解就不用考慮遞歸過程中的函數呼叫問題.

對於題主的函數:
函數功能就是: 输入 n,输出 n+1, 如果 n+1<5,执行 fun(n+1),再输出 n+1(不好用一個簡短的句子描述):
所以根據功能描述,可以得到函數的執行過程,最後得到結果.

  1. 執行 fun(1): 输入 1, 输出 2, 2+1<5,执行 fun(2),得到 fun(2) 輸出的結果,再輸出 2.
    最終輸出: 2[輸出(fun(2))]2

  2. 同樣,fun(2)輸出結果: 3[輸出(fun(3))]3
    最終輸出:23[輸出(fun(3))]32

  3. 同樣,fun(3)輸出結果: 4[輸出(fun(4))]4
    最終輸出:234[輸出(fun(4))]432

  4. 執行fun(4): 由于 4+1<5 判断失败, 不执行 fun(5),輸出結果: 55
    最終輸出:23455432

伊谢尔伦

遞歸返回的時候,這句話就會倒著輸出

为情所困

函式是沒有非同步
所以你執行fun(1)
2 $i++; echo $i;
3 回呼func(2) $i++; echo $i;
4 回呼func(3) $i++; echo $i;
5 回呼func(4) $i++; echo $i;
5 回呼func(4) 因為$i++之後,已經大於5所以執行下面的echo $i(fun(4)最底下的echo $i,此時fun(4)整個函數執行結束)
4 由於func(4)執行完成,所以會繼續執行fun(3) 最底下的echo $i
3 2 也是這樣的邏輯

世界只因有你

fun函數遞歸時,在判斷$i 所以輸出4,然後返回上次入棧的地方,繼續輸出3 ....直到fun函數完全返回。改為
if ($i < 5) { return fun($i);}將會輸出23455

某草草

可以參考下這篇文章,了解遞迴也就清楚了。 http://www.jianshu.com/p/8bee...

Peter_Zhu

你可以這樣想, 這個函數起作用的就是前半部echo了i,後半部echo了i,中間插了個調用自身直到i=5,相當於echo i直到5,再倒回來echo直到最開始的值..就這個進到出的關係搞好就行.

仅有的幸福

謝謝各位,我明白了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板