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利用COM对象访问SQLServer、Access
Oct 09 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php中的一些数组排序方法分享
Jul 20 PHP
PHP eval函数使用介绍
Dec 08 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
一张表搞清楚php is_null、empty、isset的区别
Jul 07 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 24 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
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
php输出xml属性的方法
2015/03/19 PHP
py文件转exe时包含paramiko模块出错解决方法
2016/08/12 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
javascript模仿msgbox提示效果代码
2008/06/10 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
2009/10/03 Javascript
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jquery实现简单的遮罩层
2016/01/08 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
详解Vue路由自动注入实践
2019/04/17 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
Python自动化测试ConfigParser模块读写配置文件
2016/08/15 Python
Python科学计算之Pandas详解
2017/01/15 Python
Python金融数据可视化汇总
2017/11/17 Python
python实现俄罗斯方块游戏
2020/03/25 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
Python中filter与lambda的结合使用详解
2019/12/24 Python
django 模版关闭转义方式
2020/05/14 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
实习指导老师意见
2015/06/04 职场文书
员工旷工检讨书
2015/08/15 职场文书