php递归实现
PHP递归实现示例
递归是一种函数调用自身的技术,在PHP中常用于解决需要重复执行相同逻辑的问题。以下是几种常见场景的实现方法:
阶乘计算
阶乘是递归的经典案例,n的阶乘表示为n! = n (n-1) ... * 1。

function factorial($n) {
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
echo factorial(5); // 输出120
斐波那契数列
斐波那契数列每个数字是前两个数字之和。
function fibonacci($n) {
if ($n == 0) return 0;
if ($n == 1) return 1;
return fibonacci($n - 1) + fibonacci($n - 2);
}
echo fibonacci(10); // 输出55
目录遍历
递归非常适合处理嵌套的目录结构。

function scanDirectory($dir) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
$path = $dir . '/' . $file;
if (is_dir($path)) {
scanDirectory($path); // 递归调用
} else {
echo $path . "\n";
}
}
}
}
scanDirectory('/path/to/directory');
无限级分类
处理具有父子关系的分类数据。
function buildTree(array $elements, $parentId = 0) {
$branch = array();
foreach ($elements as $element) {
if ($element['parent_id'] == $parentId) {
$children = buildTree($elements, $element['id']);
if ($children) {
$element['children'] = $children;
}
$branch[] = $element;
}
}
return $branch;
}
// 假设$categories是从数据库获取的分类数组
$tree = buildTree($categories);
print_r($tree);
递归注意事项
递归需要明确的终止条件,否则会导致无限循环。对于深度较大的递归,可能会耗尽内存,这时可以考虑使用迭代替代或增加内存限制。
ini_set('memory_limit', '256M'); // 增加内存限制
对于性能要求高的场景,递归可能不是最佳选择,因为每次函数调用都会产生额外的开销。在这种情况下,可以考虑使用循环或尾递归优化(虽然PHP不直接支持尾递归优化)。






