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 07 PHP
php 魔术函数使用说明
Feb 21 PHP
php 编写安全的代码时容易犯的错误小结
May 20 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
PHP连接SQLServer2005方法及代码
Dec 26 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
ThinkPHP安装和设置
Jul 27 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
PHP闭包定义与使用简单示例
Apr 13 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
php5 图片验证码实现代码
2009/12/11 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
2014/02/04 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
javascript求日期差的方法
2016/03/02 Javascript
使用AngularJS 跨站请求如何解决jsonp请求问题
2017/01/16 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
Python字符串的常见操作实例小结
2019/04/08 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
解决pycharm安装第三方库失败的问题
2020/05/09 Python
python字典的值可以修改吗
2020/06/29 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
优秀团支部事迹材料
2014/02/08 职场文书
军训考核自我鉴定
2014/02/13 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
拾金不昧锦旗标语
2014/06/27 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python
Go 语言结构实例分析
2021/07/04 Golang