PHP实现递归的三种方法


Posted in PHP onJuly 04, 2020

递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则会无限调用下去。

一般来说,递归函数可利用全局变量,引用,静态变量,但需对他们的作用范围有所理解。递归函数也是解决无限级分类的一个很好的技巧。

一、利用引用做参数

PHP 的引用允许用两个变量来指向同一个内容,例如 $a = &$b; 这意味着 $a 和 $b 指向了同一个变量。

如下例子,因为 $data 使用了引用传递,所以数据会一直累加。

function recursion(&$data = [], $i = 0)
{
 if ($i < 10) {
  $data[] = $i;
  $i++;
  $this->recursion($data, $i);
 }
 return $data;
}
// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]

二、利用全局变量

global 在函数内申明变量不过是外部变量的同名引用。变量的作用范围仍然在本函数范围内。改变这些变量的值,外部同名变量的值自然也改变了。

function recursion($data = [], $i = 0)
{
 global $data;
 if ($i < 10) {
  $data[] = $i;
  $i++;
  $this->recursion($data, $i);
 }
 return $data;
}
 
// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]

三、利用静态变量

静态变量只在第一次调用时初始化。仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

function recursion($i = 0)
{
 static $data = [];
 if ($i < 10) {
  $data[] = $i;
  $i++;
  $this->recursion($i);
 }
 return $data;
}
 
// 调用
$this->recursion(); // [0,1,2,3,4,5,6,7,8,9]

以上就是PHP实现递归的三种方法的详细内容,更多关于PHP 递归的资料请关注三水点靠木其它相关文章!

PHP 相关文章推荐
php中文件上传的安全问题
Oct 09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
php建立Ftp连接的方法
Mar 07 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
Yii框架视图、视图布局、视图数据块操作示例
Oct 14 PHP
laravel框架分组控制器和分组路由实现方法示例
Jan 25 PHP
laravel开发环境homestead搭建过程详解
Jul 03 #PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 #PHP
PHP 超级全局变量相关总结
Jun 30 #PHP
详细分析PHP 命名空间(namespace)
Jun 30 #PHP
浅析PHP echo 和 print 语句
Jun 30 #PHP
PHP实现抽奖功能实例代码
Jun 30 #PHP
七种PHP开发环境搭建工具
Jun 28 #PHP
You might like
用PHP调用数据库的存贮过程!
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
提交表单时执行func方法实现代码
2013/03/17 Javascript
javascript中常用编程知识
2013/04/08 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
Vue.js仿Metronic高级表格(一)静态设计
2017/04/17 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
python使用正则表达式提取网页URL的方法
2015/05/26 Python
django模板语法学习之include示例详解
2017/12/17 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
在Python中使用Neo4j的方法
2019/03/14 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python如何定义有默认参数的函数
2020/08/10 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
shell的种类有哪些
2015/04/15 面试题
财务人员的自我评价范文
2014/03/03 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
英文慰问信范文
2015/03/24 职场文书