递归函数即自调用函数,在函数体内部直接或间接的自己调用自己,函数体中会附加一个条件判断,以判断是否需要执行递归调用,并且在特定的条件下终止函数的递归。
- 递归函数不一定要 return 视情况而定
- 用递归打印当前目录所有文件 用str_repeat() 实现分级
- 静态变量与递归函数
- 全局变量与递归函数
- 引用赋值与递归函数
普通的递归函数
// 递归求1-n的和
function sum($n){
if ($n == 1){
return $n;
}
return $n + sum($n-1);
}
$ret = sum(100);
print_r($ret); // 5050
// 打印当前目录下的所有文件,目录及子目录。用str_repeat() 实现分级
function printdir($path, $lev=1){
if (is_dir($path)){
if ($dh = opendir($path)){
while (($file=readdir($dh)) !== false){
echo str_repeat(' ', $lev),$file,'<br>';
if ($file=='.' || $file=='..'){
continue;
}
if (is_dir($path.'/'.$file)){
printdir($path.'/'.$file, $lev+8);
}
}
}
}
}
printdir('.');
静态变量与递归函数
// 静态变量与递归函数
$arr = array(1,2,3,array(4,array(5,6)));
function sum($arr){
static $sum = 0;
foreach ($arr as $value){
if (is_array($value)){
sum($value);
continue;
} // 这里用 else 也可以和 continue 一样效果
$sum += $value;
}
return $sum;
}
echo sum($arr);