跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

PHP 递归算法经典面试题

PHP递归核心是函数自调用,须设明确终止条件并逼近该条件;需防内存溢出与无限循环,经典应用如阶乘与二叉树遍历;尾递归不被自动优化,建议改迭代或用生成器处理大数据。 PHP 递归算法核心要点 递归本质是函数调用自身,关键在 有明确的终止条件 和 每次调用向终止条件靠近 。PHP 中递归没有语法特殊性,但需警惕内存溢出和无限循环——尤其未设好退出逻辑时,容易触发
Fatal error: Maximum function nesting level of 'X' reached
。 经典题1:计算阶乘(n!) 最基础的递归入门题,考察对“自调用+边界判断”的理解。 终止条件:n ≤ 1 时返回 1 递推关系:n! = n × (n−1)! 示例代码:
function factorial($n) { if ($n <= 1) return 1; return $n * factorial($n - 1); }
经典题2:遍历多维数组并扁平化 真实开发中高频场景,比如处理 JSON 树形数据、菜单、权限节点等。 终止条件:当前元素不是数组,直接追加到结果中 递推逻辑:遇到数组就 foreach 逐项递归处理 注意:避免引用传参导致意外修改原数组;可配合
is_array()
和
array_merge()
或逐个
array_push()
经典题3:二叉树前序遍历(非链表结构模拟) 用关联数组模拟树节点(如
['val'=>1, 'left'=>[...], 'right'=>[...]]
),实现递归遍历。 立即学习 “ PHP免费学习笔记(深入) ”; 终止条件:节点为空(
null
或空数组) 访问顺序:根 → 左子树 → 右子树 常见错误:漏判 left/right 是否存在,或把递归调用写在条件外导致空指针警告 面试加分点:递归改迭代 & 尾递归优化意识 PHP 不支持尾递归自动优化(不像某些语言能转为循环),但面试时提到这点会显深度: 手动改写为栈模拟递归(用 while + array_push/array_pop)可规避嵌套深度限制 对于海量数据(如上万级嵌套菜单),优先考虑迭代或生成器(yield)分批处理 用
xdebug.max_nesting_level
调整仅治标,重构逻辑才是根本

相关文章