puffbaby 发表于 2011-05-11 17:18

php函数递归

<?
function f($a)
{
   if($a<10)
   {
   echo "before:".$a."</br>";
   f($a+1);
   echo"after:".$a."</br>";
    }
}
f(0);
?>结果:
before:0
before:1
before:2
before:3
before:4
before:5
before:6
before:7
before:8
before:9
after:9
after:8
after:7
after:6
after:5
after:4
after:3
after:2
after:1
after:0
不明白after后面是怎么回事,求解啊

stabilization 发表于 2011-05-11 17:50

after:9在所有f(9)执行之后才打印的,然后是after:8.........
明白没?

hq8318 发表于 2011-05-11 23:02

假设 if($a<2) 这样能理解吗,f($a+1);--f(1),用代码代入:function f($a)
{
   if(0<10)
   {
   echo "before:".$a."</br>";
   // f(1);
      if(1<10)
       {
         echo "before:".$a."</br>";
         f(2);
         echo"after:".$a."</br>";
      }
   echo"after:".$a."</br>";
    }
}

hq8318 发表于 2011-05-11 23:07

本帖最后由 hq8318 于 2011-05-11 23:10 编辑

再代入就是:function f($a)
{
   if(0<10)
   {
   echo "before:".$a."</br>";
      // f(1);
      if(1<10)
       {
         echo "before:".$a."</br>";
            // f(2);
             if(2<10)
         {
             echo "before:2</br>";
               
             echo"after:2</br>";
            }
         echo"after:".$a."</br>";
      }
   echo"after:".$a."</br>";
    }
}

ailiu008 发表于 2011-05-11 23:09

学习了

puffbaby 发表于 2011-05-12 08:50

假设 if($a
hq8318 发表于 2011-05-11 23:02 http://bbs.chinaunix.net/images/common/back.gif


    当a=9的 时候,后面为什么会是输出8,7,6。。。这样减一了呢?

puffbaby 发表于 2011-05-12 08:54

假设 if($a
hq8318 发表于 2011-05-11 23:02 http://bbs.chinaunix.net/images/common/back.gif


    if($a<10)

   {

   echo "before:".$a."</br>";

   f($a+1);

   echo"after:".$a."</br>";

    }

输出 before:9 然后调用函数f(9+1) 也就是f(10)
为什么后面after会输出9,8,7.......?

maochanglu 发表于 2011-05-12 11:01

为什么后面after会输出9,8,7.......?


应该是变量的作用域!

puffbaby 发表于 2011-05-12 12:13

为什么后面after会输出9,8,7.......?


应该是变量的作用域!
maochanglu 发表于 2011-05-12 11:01 http://bbs.chinaunix.net/images/common/back.gif


    能说明白点吗?这里没看到变量a的自减运算啊

hq8318 发表于 2011-05-12 12:53

本帖最后由 hq8318 于 2011-05-12 14:01 编辑

暂时不要去考虑“当a=9的 时候”,将它转化为:“当a=3的 时候”----“$a<3”时,后面为什么会是输出0,1,2,2,1,0。

function f($a)
{
   if(0<3)
   {
   echo "before:".$a."</br>";
       // f(1);
      if(1<3)
       {
         echo "before:".$a."</br>";
            // f(2);
             if(2<3)
         {
             echo "before:2</br>";
               //if(3<3),不成立,不执行语句
             echo"after:2</br>";
            }
         echo"after:".$a."</br>";
      }   echo"after:".$a."</br>";
    }
}
页: [1] 2
查看完整版本: php函数递归