递归函数即自调用函数,在函数体内部直接或者间接的本身调用本身,即函数的嵌套调用是函数自己。一般在此类型的函数提之中会附加一个条件判断叙述,以判断是否须要执行递归调用,而且在特定的条件下终止函数的递归调用动做,把目前流程的主控权交回到上一层函数来执行。以此,当某个执行递归调用的函数没有附加条件判断叙述时,可能会形成无限循环的错误情形。php
函数递归调用最大的好处在于能够精简程序中的复杂重复调用程序,而且能以这种特性来执行一些较为复杂的运算动做。例如,列表、动态树形菜单及遍历目录等操做。相应的非递归函数虽然效率高,但却比较难编程,并且相对来讲可读性差。现代程序设计的目标主要是可读性好。随着计算机硬件性能的不断提升,程序在更多的场合优先考虑可读而不是高效,因此,鼓励用递归函数实现程序思想。编程
一个简单的递归调用实例以下所示:函数
<?php //声明一个函数,用于测试递归 function test($n){ echo $n." "; //在函数开始输出参数的值 if($n>0){ //判断参数是否大于0 test($n-1); //若是参数大于0则调用本身,并将参数减1后再次传入 }else{ //判断参数是不大于0 echo "<--------> "; } echo $n." "; } test(10); //调用test函数将整数10传给参数 ?>
该程序执行后输出以下的结果:性能
1测试 |
|
找到结果中后半部分的数字正向顺序输出的缘由设计
说明:在上面的实例中声明了一个 test()函数,该函数须要一个整型的参数。在函数外面经过传递整数 10 做为参数调用 test()函数。在 test()函数体中,第一条代码输出参数的值和一个空格。而后判断条件是否成立,成立则调用本身并将参数减 1 再次传入。开始调用时,它是外层调内层,内层调更内一层,直到最内层因为条件不容许必须结束。最内存结束了,输出 <--------> 做为分界符,执行调用以后的代码输出参数的值和空格,它就会回到稍外一层继续执行。稍外一层在结束时,退回到在稍外一层继续执行,层层推出,直到最外层结束。执行完成之后的结果就是咱们上面看到的结果。code