php递归函数怎么用才有效


Posted in PHP onFebruary 24, 2018

有关php递归函数的用法,分享几个php递归函数的例子,在php编程中,使用递归进行函数调用很常见,递归函数用的好,可以提高代码效率,通过例子学习php递归函数的使用。

一、什么是递归函数?

一个函数在它的函数体内调用它自身称为递归调用。 这种函数称为递归函数。

php递归函数与非递归函数有什么区别?

例一:使用静态变量

代码示例:

function test(){
 static $dig=0;
 if($dig++<10){
  echo $dig;
  test();
 }
}
test();//12345678910

例二:使用递归函数和循环实现字符串逆转排列

代码示例:

function unreverse($str){
 for($i=1;$i<=strlen($str);$i++){
  echo substr($str,-$i,1);
 }
}
unreverse("abcdefg");//gfedcbc
function reverse($str){
 if(strlen($str)>0){
  reverse(substr($str,1));
  echo substr($str,0,1);
  return;
 }
}
reverse("abcdefg");//gfedcbc

二、php递归函数使用实例

php递归使用示例(php递归函数),包括递归获得角色ID字符串、递归获取级联角色信息数组、通过父角色的id获取子角色信息。

例子:

代码示例:

//递归获得角色ID字符串
function explodeRole($roleObj, &$resultStr){
 if(0 < count($roleObj->childRoleObjArr)){
 foreach($roleObj->childRoleObjArr as $childRoleObj){
  if('' == $resultStr){
  $resultStr .= "{$childRoleObj->id}";
  }else{
  $resultStr .= ", {$childRoleObj->id}";
  }
  explodeRole($childRoleObj, $resultStr);
 }
 }
}
//递归获取级联角色信息数组
function makeRoleRelation(&$roleObjArr){
 foreach($roleObjArr as $item){
 $item->childRoleObjArr = getRoleObjArrByParentId($item->id);
 if(0 < count($item->childRoleObjArr)){
  makeRoleRelation($item->childRoleObjArr);
 }
 }
}
//通过父角色的id获取子角色信息 
function getRoleObjArrByParentId($parentid){
 $operCOGPSTRTSysRole = new COGPSTRTSysRole();
 $operCOGPSTRTSysRole->setColumn($operCOGPSTRTSysRole->getAllColumn());
 $operCOGPSTRTSysRole->setWhere("parentroleid={$parentid}");
 $roleObjArr = $operCOGPSTRTSysRole->convResult2ObjArr($operCOGPSTRTSysRole->selectTable());
 return isset($roleObjArr)?$roleObjArr:array();
}

php递归函数用法

例1:使用静态变量实现递归。

代码示例:

function test(){
 static $dig=0;
 if($dig++<10){
 echo $dig;
 test();
 }
}
test();//12345678910

例2:使用递归函数和循环实现字符串逆转排列。

代码示例:

function unreverse($str){
for($i=1;$i<=strlen($str);$i++){
echo substr($str,-$i,1);
}
}
unreverse("abcdefg");
//gfedcbc
function reverse($str){
if(strlen($str)>0){
reverse(substr($str,1));
echo substr($str,0,1); return;
}
}
reverse("abcdefg");//gfedcbc

php递归函数有时可以循环替代,建议当不能用循环替代时再用,因为用循环我们更容易理解,更不容易出错。 php递归函数 php支付递归函数,递归函数就是调用自己本身,这些函数特别适用于浏览动态数据结构,例如树和列表。 几乎没有web应用程序要求使用复杂的数据结构。

例子:

代码示例:

reverse_r(substr($str,1)); echo substr($str,0,1); return; } ?>

这个程序清单中实现两个函数,这两个函数都可以相反的顺序打印字符串的内容 函数reversr_r是通过递归实现的,而函数reverse_i()是通过循环实现的。

总结

以上所述是小编给大家介绍的php递归函数怎么用才有效,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
对javascript和select部件的结合运用
Oct 09 PHP
php创建多级目录代码
Jun 05 PHP
PHP 错误之引号中使用变量
May 04 PHP
PHP 文件上传功能实现代码
Jun 24 PHP
php流量统计功能的实现代码
Sep 29 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
php读取csc文件并输出
May 21 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 PHP
原生php实现excel文件读写的方法分析
Apr 25 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 28 PHP
php格式文件打开的四种方法
Feb 24 #PHP
Docker搭建自己的PHP开发环境
Feb 24 #PHP
php爬取天猫和淘宝商品数据
Feb 23 #PHP
Laravel如何使用Redis共享Session
Feb 23 #PHP
Laravel 实现密码重置功能
Feb 23 #PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 #PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 #PHP
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP如何通过表单直接提交大文件详解
2019/01/08 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
js下载文件并修改文件名
2017/05/08 Javascript
node省市区三级数据性能测评实例分析
2019/11/06 Javascript
Python入门_学会创建并调用函数的方法
2017/05/16 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
python中pip的安装与使用教程
2018/08/10 Python
Python 学习教程之networkx
2019/04/15 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
python+openCV对视频进行截取的实现
2020/11/27 Python
jupyter notebook更换皮肤主题的实现
2021/01/07 Python
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
DNA基因检测和分析:23andMe
2019/05/01 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
教师查摆问题自查报告
2014/10/11 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2015年工商所工作总结
2015/05/21 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
Python中相见恨晚的技巧
2021/04/13 Python
python可视化之颜色映射详解
2021/09/15 Python
用JS写一个发布订阅模式
2021/11/07 Javascript