示例:<?php
$b=0;
function a($i){
  global $b;
  if(!$i){return;}
  $a=$i;
  echo $a,' '; 
  $i--;
  a($i);//开始递归
  $b++;
  echo $b,' ';
}
a(100);
?>执行结果:
100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85 84 83 82 81 80 79 78 77 76 75 7
4 73 72 71 70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48
47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21
 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 1
3 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 9
3 94 95 96 97 98 99 100 请按任意键继续. . .问题:为什么在递归后面的代码是在前面全部循环完毕后才开始执行?

解决方案 »

  1.   

    a($i);//开始递归
    echo 'somethig';按照顺序执行的话,echo,应该在a($i)运行完后
    a($i)(第1次)运行的时候,a()内部又再次调用a($i)(第2次),在这个运行的过程中,对于a($i)(第1次)是没有运行完,所以不存在echo(第1次)
    只有当a($i)(最后1次),它本身运行到一半的时候,发现条件不满足,return了,算它本身结束了
    之后,对于上一层:a($i)(倒数第2次)来说,a($i)调用完毕,因此echo了,
    之后,又是上上层
      

  2.   

    那个递归不太好,我改了一下!
    他就好比一层一层进去在一层一层退出来,也不知道这样说恰当不!<?php#$b=0;function a( $i )
    {
        #global $b;
        if( !$i ){ return; }
        $a=$i;
        echo $a,' ';
        $i--;
        a($i);//开始递归
        #$b++;
        #echo $b,' ';
        echo $i,' ';
    }
    a(100);