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 相关文章推荐
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
Jul 01 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
php写入、删除与复制文件的方法
Jun 20 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
php 的多进程操作实践案例分析
Feb 28 PHP
Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析
May 15 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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正则走开
2008/03/15 PHP
php+javascript的日历控件
2009/11/19 PHP
限制复选框的最大可选数
2006/07/01 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
使用javascript实现雪花飘落的效果
2015/01/13 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
JS ES6中setTimeout函数的执行上下文示例
2017/04/27 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
简述vue中的config配置
2018/01/23 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python可变参数用法实例分析
2017/04/02 Python
python 格式化输出百分号的方法
2019/01/20 Python
在Python中使用Neo4j的方法
2019/03/14 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
Python 实现二叉查找树的示例代码
2020/12/21 Python
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
中学教师自我鉴定
2014/02/07 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
2015年国庆节寄语
2015/08/17 职场文书
开网店计划分析
2019/07/30 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP