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 相关文章推荐
手把手教你使用DedeCms的采集的图文教程
Mar 11 PHP
php xfocus防注入资料
Apr 27 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
简单解决新浪SAE无法上传文件的问题
May 13 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
CI配置多数据库访问的方法
Mar 28 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 PHP
php使用scandir()函数扫描指定目录下所有文件示例
Jun 08 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 PHP
phpStorm2020 注册码
Sep 17 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
第八节 访问方式 [8]
2006/10/09 PHP
第五节 克隆 [5]
2006/10/09 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
js 判断脚本加载完毕的代码
2011/07/13 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
vue分页组件table-pagebar使用实例解析
2020/11/15 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
2016/09/14 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
Python字符串处理之count()方法的使用
2015/05/18 Python
Python过滤列表用法实例分析
2016/04/29 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python爬取网页中的图片(搜狗图片)详解
2017/03/23 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
python+openCV利用摄像头实现人员活动检测
2019/06/22 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
2020/02/06 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
印尼综合在线预订网站:Tiket.com(机票、酒店、火车、租车和娱乐)
2018/10/11 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
争先创优活动总结
2014/08/27 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
2015年七夕情人节活动方案
2015/05/06 职场文书
PHP 时间处理类Carbon
2022/05/20 PHP