本帖最后由 kuzi1314 于 2012-06-14 14:27:46 编辑

解决方案 »

  1.   

    这样的执行循序
    你说该之行几次
    4    static $a = 0;//这里是第4行
    5    echo $a . '<br>';
    6    $a ++;
    7    if ($a < 2) {
    8         Test ();
    4    static $a = 0;//这里是第4行
    5    echo $a . '<br>';
    6    $a ++;
    7    if ($a < 2) {
    9    }
    10    $a --;
    11    return $a;
    9    }
    10    $a --;
    11    return $a;
      

  2.   


    因为这里11行有个return $a,所以你这段最后的结果是1,但是实际上用我那段代码最后执行得到的结果是0.就是在第一次执行完11行return之后又回到10行去执行$a--.为什么你这里的return能退出function,而我那段代码里面的11行return却不可以呢?谢谢了先。
      

  3.   

        if ($a < 2) {//条件成立时,进入 Test
             Test ();
                       <== return $a;//返回到这里
        }
      

  4.   

    我递归也用不好,但递归有时候执行效率到挺高的。
    老大把你的执行结果说的很明白了,建议你按下面方式跟踪下$a的值,<?php
    echo Test ();
    function Test() {
        static $a = 0;//这里是第4行
        echo $a . '<br>';//输出0;
        $a ++;          //现在a=1
        if ($a < 2) {    //条件成立;调用自己,然后执行的是输出的ECHO,所以输出1;
                        // 然后将$A++  A=2
                         //然后比较条件不成立 执行--操作 A =1;跳出递归TEST函数;
             Test ();
        }
        $a --;           //跳出时a的值=1,在--,a就=0;然后输出0
        return $a;       //所以最终结果0,1,0
    }
    ?>
      

  5.   


    function Test() {
        static $a = 0;//这里是第4行 ------------------------(1)
        echo $a . '<br>';
        $a ++;
    /*注意这里非注释代码的上下一行 ,return值必定是(1)处的定义*/
    /*如果你想得到预期的返回结果1,
        if ($a < 2) {
             return Test ();
        }
    */
        $a --;
        return $a;
    }
      

  6.   

    递归的运行流程 你还不大清楚呢...
    虽然 a++ 最后是等于 2 跳出了递归循环
    但是 返回了 2次 a-- 的操作。
    所以最后 return 的结果是 a = 0
    就像 唠叨老大说的 流程