PHP递归算法的实例程序
发布:smiling 来源: PHP粉丝网 添加日期:2016-01-01 15:24:34 浏览: 评论:0
递归算法虽然不是高性能的算法但是递归我们用到的非常的多,如目录遍历或树形结构都会有用到了,下面一起来看小编整理了一些关于递归算法的解析与例子。
递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白,直接上例子
- 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本身自带的有一个readdir的函数,不过只能读取当前的目录,根据这个函数,我写了另外一个函数,用来实现我的需求。函数的原理很简单,主要就是用了一下递归调用.
- function file_list($path){
- if ($handle = opendir($path)) {
- while (false !== ($file = readdir($handle))) {
- if ($file != "." && $file != "..") {
- if (is_dir($path."/".$file)) {
- echo $path.": ".$file."<br>";//去掉此行显示的是所有的非目录文件
- file_list($path."/".$file);
- } else { //phpfensi.com
- echo $path.": ".$file."<br>";
- }
- }
- }
- }
- }
例子
递归的应用中序遍历二叉树
- void inorder (BinTree T){
- if (T){
- inorder(T->lchild);
- printf(“%c”,T->data);
- inorder(T->rchild);
- }
- }
Tags: PHP递归算法 PHP递归程序
- 上一篇:php生成csv文件并下载及问题总结
- 下一篇:php版微信自定义分享代码
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)