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 06 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
javascript+php实现根据用户时区显示当地时间的方法
Mar 11 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
微信公众号开发之通过接口删除菜单
Feb 20 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
PHP实现带进度条的Ajax文件上传功能示例
Jul 02 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 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字符串 ==比较运算符的副作用
2009/10/21 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
2014/07/25 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JS文本框不能输入空格验证方法
2013/03/19 Javascript
js去空格技巧分别去字符串前后、左右空格
2013/10/21 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
vue中利用iscroll.js解决pc端滚动问题
2020/02/15 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
Python 时间处理datetime实例
2008/09/06 Python
python实现人人网登录示例分享
2014/01/19 Python
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
深入分析python 排序
2020/08/24 Python
如何用Python 加密文件
2020/09/10 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
一套PHP的笔试题
2013/05/31 面试题
你对IPv6了解程度
2016/02/09 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
幼儿教师师德演讲稿
2014/05/06 职场文书
美术社团活动总结
2014/06/27 职场文书
优秀团员事迹材料2000字
2014/08/20 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
市场部岗位职责范本
2015/04/15 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
Java对文件的读写操作方法
2022/04/29 Java/Android