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 相关文章推荐
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
一个显示效果非常不错的PHP错误、异常处理类
Mar 21 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
symfony2.4的twig中date用法分析
Mar 18 PHP
基于PHP实现商品成交时发送短信功能
May 11 PHP
PHP去除字符串最后一个字符的三种方法实例
Mar 01 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 PHP
Laravel+Intervention实现上传图片功能示例
Jul 09 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计算当前程序执行时间示例
2014/04/24 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
详解AngularJS中的http拦截
2016/02/09 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
python静态方法实例
2015/01/14 Python
Python中zfill()方法的使用教程
2015/05/20 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
windows下python和pip安装教程
2018/05/25 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
python flask安装和命令详解
2019/04/02 Python
Form表单及django的form表单的补充
2019/07/25 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
基于Python把网站域名解析成ip地址
2020/05/25 Python
python RSA加密的示例
2020/12/09 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
《傅雷家书》教学反思
2014/04/20 职场文书
团干部培训方案
2014/06/03 职场文书
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
MySQL插入数据与查询数据
2022/03/25 MySQL