<?php
   function demo($num){
     echo $num."<br>";
     if($num>0)
       demo($num-1);
     else
       echo "----------<br>";
     echo $num."<br>";
 }  demo(10);
   
?> 谁可以讲解一下为什么输出是10 9 8 7 6 5 4 3 2 1 0 --------- 0 1 2 3 4 5 6 7 8 9 10
 而不是10 9 8 7 6 5 4 3 2 1 0 ---------- 0递归函数

解决方案 »

  1.   

    第二个 echo $num."<br>"; 并不在条件分支中,当然始终是要执行到的
      

  2.   

    可以帮详细讲解一下吗大侠?我是菜鸟,在在自学PHP,有许多问题不是很明白,谢谢!
      

  3.   

    function demo($num){
      echo $num."<br>"; //打印$num的值
      if($num>0) {//如果$num大于0就
        demo($num-1); //进入递归
      }else {
       echo "----------<br>"; 
      }
      echo $num."<br>"; //这里总是要执行到的
    }
      

  4.   

      请问版主,是不是递归全部完成后,才会执行后面的echo "-----<br>"呢
      

  5.   

    demo(1);
    demo(2);你说应该是什么结果?
      

  6.   

    呵呵!根据版主的说法,我想你应该知道了为啥10 9 8 7 6 5 4 3 2 1 0 ----这个是怎样得来吧?但你还是不知道为啥后来的是0 1 2 3 4 5 6 7 8 9 10,而不是10 9 8 7 6 5 4 3 2 1 0。
    好吧,我来讲讲:
    //假设$num循环到0了
      1.<?php
      2.function demo($num){————假设当$num执行到0了(也就是循环有10次);(第一步)
      3.echo $num."<br>";————则输出0;(第二步)
    //下面{}内为if——else的条件语句
      5. {
      6.   if($num>0)————不符合条件;
      7.     demo($num-1);————跳过
      8.   else
      9.    echo "----------<br>";————输出“————”(第三步)
          }
     //这里已经跳出了条件语句,
      10.   echo $num."<br>";————输出“0”(第四步)//注意这步在前面的10次循环中还没执行,所以现           在开始执行//
      11. }  12. demo(10);
       
      13.   ?>
    那么接下来就怎样了?接下来距返回到当$num=1时还没循环的那部分,即第10行以及第10行以后的语句   echo $num."<br>";(第四步)
    即输出1
    然后发后当$num=2时还没循环的那部分,即输出2
    ..........
    最后返回刚开始执行的还没完成的一步,即当$num=1时还没循环的那部分
    输出10