b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

php递归算法经典例子

电脑杂谈  发布时间:2020-01-08 02:01:51  来源:网络整理

递归算法经典实例_递归 算法_全排列算法 非递归

PHP递归算法就是函数调用数组了操作相当的简洁了,我们后面来帮大家介绍PHP递归算法及实际的一些关于递归的用法。

递归函数为自调用函数,在变量体内直接或间接自己调用自己,但必须设定自调用的条件,若满足条件,则调用函数原本,若不满足则中止本函数的自调用,然后把现在流程的主控权交回给上一层函数来执行,可能这么给你们讲解,还是很难明白,直接上举例

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递归算法来解决难题

例:求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;

插入数据后,如图:

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

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); //输出无限级分类

效果如:

接着我们来看返回字符格式的变量,一样要使用递归:

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格式的数据,则能使用:


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-136146-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...