递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。
该函数必须有一种能够"停滞调用"的机制,如利用if语句。该机制,被称为递归函数的"出口"。
实例1:

function f1($n){ echo $n." "; $n++;}f1(5);
输出结果5
实例2:
function f1($n){ echo $n." "; $n++; if($n<10){ f1($n); }}f1(5);
输出结果:5 6 7 8 9
实例3
<?phpfunction f1($n){ echo $n." "; $n++; if($n<10){ f1($n); echo $n." "; }}f1(5);?>
输出结果:5 6 7 8 9 9 8 7 6
实例4
function test($n){ echo $n." "; if($n>0) test($n-1); else echo "<-->";}test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->
实例5
function test($n){ echo $n." "; if($n>0) test($n-1); else echo "<-->"; echo $n." ";}test(10)
输出结果:10 9 8 7 6 5 4 3 2 1 0 <-->0 1 2 3 4 5 6 7 8 9 10
谈论实际运用中的递归思想运用(阶乘的实现):
阶乘的数学定义:一个正整数的阶乘,是从1一贯乘到它本身的乘积。
阶乘的一个基本算法是:
n的阶乘 = (n-1)的阶乘 n;
个中,1的阶乘是1。
function jiecheng($n){ if($n == 1){ //1的阶乘是1(已知) return 1; } //其他数的阶乘,是 (该数) (该数减一的阶乘) 的乘积 return jiecheng($n-1) $n;}$v1 = jiecheng(5);echo "<br />v1 = $v1";
以下为该函数的仿照调用过程:
$v1 = jiecheng(5)$v1 = jiecheng(4) 5$v1 = (jiecheng(3) 4) 5$v1 = ((jiecheng(2) 3) 4) 5$v1 = (((jiecheng(1) 2) 3) 4) 5
特殊把稳:上一行jiecheng(1)表示哀求1的阶乘,但1的阶乘是"已知"的,为1
$v1 = (((1 2) 3) 4) 5$v1 = ((2 3) 4) 5$v1 = (6 4) 5$v1 = 24 5$v1 = 120
递归函数在类中如何定义?
如: 改名键名的大小写在类中方法的编写
private function changeArrKey($array, $case = 0){ if(!is_array($array)) return $array; $tempArray = array(); $do = ($case === 0)? "strtolower" : "strtoupper"; foreach ($array as $key=>$value){ $key = $do($key); if(is_array($value)){ $value = self::changeArrKey($value); //self 代表当前类 }else{ $value = $do($value); } $tempArray[$key] = $value; } return $tempArray;}