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 相关文章推荐
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
ThinkPHP3.2.2的插件控制器功能
Mar 05 PHP
php获取错误信息的方法
Jul 17 PHP
phpmailer简单发送邮件的方法(附phpmailer源码下载)
Jun 13 PHP
CentOS 上搭建 PHP7 开发测试环境
Feb 26 PHP
深入分析PHP设计模式
Jun 15 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语法(1)
2006/10/09 PHP
如何对PHP程序中的常见漏洞进行攻击(下)
2006/10/09 PHP
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
javascript 自动填写表单的实现方法
2010/04/09 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
忘记ftp密码使用python ftplib库暴力破解密码的方法示例
2014/01/22 Python
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
解析Python编程中的包结构
2015/10/25 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python 列表理解及使用方法
2017/10/27 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
解决Pycharm中恢复被exclude的项目问题(pycharm source root)
2020/02/14 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
Origins加拿大官网:雅诗兰黛集团高端植物护肤品牌
2017/11/19 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
物业经理求职自我评价
2013/09/22 职场文书
七年级数学教学反思
2014/01/22 职场文书
初三化学教学反思
2014/01/23 职场文书
产品质量承诺书范文
2014/03/27 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
SpringBoot2零基础到精通之数据与页面响应
2022/03/22 Java/Android