网站推广.NET

网站推广.NET

php递归算法经典实例

来源:互联网

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

<script>ec(2);</script>

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

function test ($n){echo $n.”  “;if($n>0){test($n-1);}else{echo “<?>”;}echo $n.”  ”}test(2)

这个例子最终的输出结果是2 1 00 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 00 1 2

立即学习“PHP免费学习笔记(深入)”;


如何考虑用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 &#39;0&#39;,   PRIMARY KEY (`id`) ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

插入数据后,如图:

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

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 .= &#39;<ul>&#39;;         while ($row = mysql_fetch_array($result)) { //循环记录集             $str .= "<li>" . $row[&#39;id&#39;] . "--" . $row[&#39;title&#39;] . "</li>"; //构建字符串             get_str($row[&#39;id&#39;]); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级         }         $str .= &#39;</ul>&#39;;     }     return $str; }
递归算法经典实例