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批量删除数据
Jan 18 PHP
收集的二十一个实用便利的PHP函数代码
Apr 22 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php表单敏感字符过滤类
Dec 08 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
深入讲解PHP的对象注入(Object Injection)
Mar 01 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
php layui实现前端多图上传实例
Jul 30 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
PHP微信红包生成代码分享
2016/10/06 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
Javascript的严格模式strict mode详细介绍
2014/06/06 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
浅谈Python脚本开头及导包注释自动添加方法
2018/10/27 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
python的range和linspace使用详解
2019/11/27 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
学python爬虫能做什么
2020/07/29 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
企业管理专业个人求职信范文
2013/09/24 职场文书
会计专业求职信范文
2014/03/16 职场文书
大学生读书笔记大全
2015/07/01 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
使用Ajax实现进度条的绘制
2022/04/07 Javascript