递归算法php,php递归算法经典实例「建议收藏」

递归算法php,php递归算法经典实例「建议收藏」PHP递归算法就是函数调用函数了操作非常的简单了,我们下面来给各位介绍PHP递归算法及实际的一些关于递归的用法。递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子functiontest($n){echo$n.”…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

PHP递归算法就是函数调用函数了操作非常的简单了,我们下面来给各位介绍PHP递归算法及实际的一些关于递归的用法。

递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子function test ($n){

echo $n.” “;

if($n>0){

test($n-1);

}else{

echo “>”;

}

echo $n.” ”

}

test(2)

这个例子最终的输出结果是2 1 0>0 1 2

我解释下 为何输出是这样的

第一步,执行test(2),echo 2,然后因为2>0,执行test(1), 后面还有没来得及执行的echo 2

第二步,执行test(1),echo 1,然后因为1>0,执行test(0),同样后面还有没来得及执行的 echo 1

第三步,执行test(0),echo 0,执行test(0),echo 0, 此时0>0的条件不满足,不在执行test()函数,而是echo “>”,并且执行后面的 echo 0

此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行,也就是开始执行刚刚所有test()函数没来得及输出的最后一个echo,0的一层是1也就是输出1 1的上一层是2 也就是输出2 2没有山一层 所以呢 输出的内容就是2 1 0>0 1 2

如何考虑用PHP递归算法来解决问题

例:求s=1+2+3+4+5+6+……+n本来这个问题我们过去常用循环累加的方法。而这里如要用递归的方法,必须考虑两点:

1) 能否把问题转化成递归形式的描述;

2) 是否有递归结束的边界条件。

显然递归的两个条件都有了:

1) s(n) =s(n-1)+n

2) s(1)=1

所以源程序为:int progression(int n){

int res;

if (n=1 )res=1 else res=progression(n-1)+n;

return res;

}

中序遍历二叉树void inorder (BinTree T){

if (T){

inorder(T->lchild);

printf(“%c”,T->data);

inorder(T->rchild);

}

}

Mysql

首先我们准备一张数据表class,记录商品分类信息。表中有三个字段,id:分类编号,主键自增长;title:分类名称;pid:所属上级分类id。

class表结构:CREATE TABLE IF NOT EXISTS `class` (

`id` mediumint(6) NOT NULL AUTO_INCREMENT,

`title` varchar(30) NOT NULL,

`pid` mediumint(6) NOT NULL DEFAULT ‘0’,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入数据后,如图:

1440641488132426.jpg

根据不同的需求,我们提供两种不同格式的自定义函数,一种是返回字符串,一种是返回数组,两种函数都使用了递归方法。先看返回字符串格式的函数:function get_str($id = 0) {

global $str;

$sql = “select id,title from class where pid= $id”;

$result = mysql_query($sql);//查询pid的子类的分类

if($result && mysql_affected_rows()){//如果有子类

$str .= ”;

while ($row = mysql_fetch_array($result)) { //循环记录集

$str .= “

” . $row[‘id’] . “–” . $row[‘title’] . “”; //构建字符串

get_str($row[‘id’]); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级

}

$str .= ”;

}

return $str;

}

以上函数get_str()通过递归,不断查询下级分类,并最终返回字符串,大家可以根据项目需求修改其中的str,最终生成一个无限分级列表:include_once(‘connect.php’); //连接数据库,connect.php文件自己写一个啊

echo get_str(0); //输出无限级分类

效果如:

1440641531425842.jpg

接着我们来看返回数组格式的函数,一样要使用递归:function get_array($id=0){

$sql = “select id,title from class where pid= $id”;

$result = mysql_query($sql);//查询子类

$arr = array();

if($result && mysql_affected_rows()){//如果有子类

while($rows=mysql_fetch_assoc($result)){ //循环记录集

$rows[‘list’] = get_array($rows[‘id’]); //调用函数,传入参数,继续查询下级

$arr[] = $rows; //组合数组

}

return $arr;

}

}

函数get_array()返回了数组,这是我们期待的,所以笔者推荐使用get_array()得到数组,这样一来,我们可以对数组进行任意操作,比如我们可以将数组转换成json格式的数据传给前端页面,前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表,下拉分类列表等。include_once(‘connect.php’); //连接数据库

$list = get_array(0); //调用函数

print_r($list); //输出数组

如果要输出json格式的数据,则可使用:

1440641555554464.jpgecho json_encode($list);

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/169557.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ideaIU-2021.7.20 激活码【2021免费激活】

    (ideaIU-2021.7.20 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~ML…

  • stm32 st_基于STM32

    stm32 st_基于STM32用了不少芯片,就只有51有位操作,这个特性很喜欢,赋值简单、效率又高且节省内存,不必为了一个bool去分配一个uint8.发现stm32有Bit-Banding,就试了一下,用MDK-ARM环境下的汇编代码做了一些比较。操作,清零USART1的SR寄存器的TC位:方法一://利用USART_TypeDef这个结构寻到SR的地址,再赋值USART1->SR&amp…

    2022年10月13日
  • 随机振动 matlab,Matlab内建psd函数在工程随机振动谱分析中的修正方法「建议收藏」

    随机振动 matlab,Matlab内建psd函数在工程随机振动谱分析中的修正方法「建议收藏」随机信号的功率谱分析是一种广泛使用的信号处理方法,能够辨识随机信号能量在频率域的分布,同时也是解决多种工程随机振动问题的主要途径之一.Matlab作为大型数学分析软件,得到了广泛应用,目前已推出7.x的版本.Matlab内建了功能强大的信号处理工具箱.psd函数是Matlab信号处理工具箱中自功率谱分析的主要内建函数.Matlab在其帮助文件中阐述psd函数时均将输出结果直接称为powerspec…

  • java responsebody_@ResponseBody 详解「建议收藏」

    java responsebody_@ResponseBody 详解「建议收藏」@ResponseBody的作用其实是将java对象转为json格式的数据。@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据…

  • 考研数学真题用谁的_蓝桥杯编程题

    考研数学真题用谁的_蓝桥杯编程题⭐️引言⭐️大家好,我是执梗,蓝桥杯的报名快接近尾声,如果有兄弟还没报名不了解比赛,缺少视频讲解和真题资源的一定要阅读一下我的这篇蓝桥全解析——蓝桥全解析。为了帮助兄弟们更好准备比赛,我特意选取了蓝桥往年真题中许多能体现出蓝桥经典题型的题目——如暴力遍历、动态规划等等。有帮助的兄弟们一定要收藏一下,后面会陆续更新。????博客首页:执梗的博客????欢迎关注????点赞????收藏⭐️留言????❤️:热爱Java学习,期待一起交流!????作者水平很有限,如果发现错误

  • 罗技键盘锁了,按哪个键就开了_无线键盘自动休眠

    罗技键盘锁了,按哪个键就开了_无线键盘自动休眠在弹出的界面中查看一下系统是不是已经开启了休眠。如果没有休眠,则无需关闭,如果有这个选项,就继续看下面;然后打开开始菜单,在开始菜单的右边会有一个控制面板的选项,打开控制面板,在控制面板中,找到电源选项,然后点击打开统已经默认设定了一个电源计划,即推荐的选项,但是,系统休眠会占用许多系统空间,所以要把它给设置为关闭。点击平衡右边的蓝色的设置链接,即更改计划设置;在更改计划的设置中,点击下面的更改高…

    2022年10月10日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号