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中利用XML技术构造远程服务(上)
Oct 09 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
destoon之一键登录设置
Jun 21 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
php 输出json及显示json中的中文汉字详解及实例
Nov 09 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
详解php反序列化
Jun 10 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
一个显示天气预报的程序
2006/10/09 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
jQuery层次选择器选择元素使用介绍
2013/04/18 Javascript
jqeury-easyui-layout问题解决方法
2014/03/24 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
从0到1搭建element后台框架优化篇(打包优化)
2019/05/12 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
Javascript生成器(Generator)的介绍与使用
2021/01/31 Javascript
python del()函数用法
2013/03/24 Python
python基础教程之分支、循环简单用法
2016/06/16 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Numpy 多维数据数组的实现
2020/06/18 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
自我推荐书
2013/12/04 职场文书
行政助理的岗位职责
2014/02/18 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python