php递归函数详解

php递归函数详解很多同学在学习递归函数的时候会感到头晕,无法搞清楚递归函数的原理和运行机制,本文将给大家详细讲解递归函数的运行机制和运用。 那什么是递归函数呢? 递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。下面就

很多同学在学习递归函数的时候会感到头晕,无法搞清楚递归函数的原理和运行机制,本文将给大家详细讲解递归函数的运行机制和运用。

 

那什么是递归函数呢?

 

递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。

下面就用一个例子为大家详解递归:

<?php
 
//声明一个函数,用于测试递归
 
function
test(
$n
){
   
echo
$n
.
"&nbsp;"
;       
//在函数开始输出参数的值
   
if
(
$n
>0){               
//判断参数是否大于0
     
test(
$n
-1);           
//如果参数大于0则调用自己,并将参数减1后再次传入
   
}
else
{                  
//判断参数是不大于0
     
echo
"<-------->  "
;
   
}
   
echo
$n
.
"&nbsp;"
;
 
}
 
test(10);                  
//调用test函数将整数10传给参数

?>

大家首先思考一下,这个例子最终的输出结果是什么?
 
好,我们来看一下本函数输出的结果:
 
10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10
 
怎么样,不知道这个结果是否跟大家设想的一样呢?
 
好,下面我一步一步来给大家讲解...
 
第一步,执行test(10),echo 10,然后因为10>0,执行test(9),后面还有没来得及执行的echo 10
 
第二步,执行test(9),echo 9,然后因为9>0,执行test(8),同样后面还有没来得及执行的 echo 9
 
第三步,执行test(8),echo 8,然后因为8>0,执行test(7),同样后面还有没来得及执行的 echo 8
 
第四步,执行test(7),echo 7,然后因为7>0,执行test(6),同样后面还有没来得及执行的 echo 7
 
第五步,执行test(6),echo 6,然后因为6>0,执行test(5),同样后面还有没来得及执行的 echo 6
 
...........
 
第十步,执行test(0),echo 0,此时0>0的条件不满足,不在执行test()函数,而是echo “<-->”,并且执行后面的 echo 0
 
10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

此时,输出的内容如上述显示的红色部分,此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行
 
也就是开始执行刚刚所有test()函数没来得及输出的最后一个echo
 
它的流程是这样子的:
php递归函数详解
在函数执行的第一到第十步,函数输出的的是绿色部分,红色部分还“没来及”输出,就该调用自己执行操作,依次类推,直到流程执行到不再满足调用自己的条件,输出“<-->”,此时,流程该执行前面“没来及”输出的代码。

就像我们平时玩的游戏一样,打死一个怪物,掉出一个宝贝,但是还有其他怪物在等着你来消灭,你不得不消灭完所有的怪物才能回来一个一个地拾宝贝。

怎么样,这么样跟大家来讲解是不是明白了呢? 
 有的同学又会问了,我在执行完所有的test函数之后,最终输出0

也就是输出到这里,

10 9 8 7 6 5 4 3 2 1 0 <--> 0

那为什么下一个输出的是 1 ,而不是 10 呢,

对于这个问题,为了帮助大家理解,下面我再给大家举一个例子:

看如下代码:

&lt;?php
function one($num){
echo $num;
two($num1);
echo $num;
}
function two($num){
echo $num;
three($num1);
echo $num;
}
function three($num){
echo $num;
}
one(3);
?&gt;

以上代码对test()函数进行分解操作,我们思考:

执行one(3)函数的时候,同test()函数一样,首先要输出3,然后调用two(2)函数,

注意,此时还没有输出下面的3,

接着走,执行two(2)函数,输出2,调用three(1)函数,同样,这里没有来得及输出下面的2,

执行three(1),直接输出1,不在调用其它函数,

此时,我们想刚刚的two()函数是不是还没有执行完,好,接着执行two()函数没有完成的部分,two()函数执行完之后,也就是输出下面的2,然后开始执行one()函数没有执行完的部分,也就是输出下面的3,此时所有函数执行完毕。

那么,输出结果是:

3 2 1 2 3

今天的文章php递归函数详解分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33600.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注