递归,方法重复调用其自身。对于递归,估计是一开始就没有理解透,经常感觉对递归掌握的不够透,理解的不够深入。最近做的一个网站,要求遍历产品所对应的每一级目录,并取得最大的目录(一级目录)及最小目录(没有子目录了)。当时就自己写了一个递归方法,居然还成功了,呵呵。其实我个人觉得递归就是给定一个结束循环的条件,然后让该方法不停的调用其自身直至满足结束条件。当然这么理解肯定是很粗浅的。下面就举个最简单的例子:
/**
* @author 蒋浩钦
* @param string $CategoryID 目录ID
* @param array $arr 定义一个空数组
* @param int $Deep 定义一个整形表示目录深度
* @param object $conn 数据库连接对象
*/
public function GetBigCategoryID($CategoryID,&$arr,&$Deep,$conn){
$sql = "SELECT parent_id FROM zen_categories WHERE categories_id='{$CategoryID}'";
$query = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_array($query);
if($row["parent_id"] > 0){
array_push($arr,$row["parent_id"]);
$Deep++;
$this->GetBigCategoryID($row["parent_id"],$arr,$Deep,$conn);
}
}
$arr、$Deep这两个都是传引用的。首先传入一个目录ID(CategoryID),查询出它是否还有上一级目录,即parent_id,如果有的话,先将本目录ID压入$arr数组,再将它的上一级目录ID继续当做第一个参数重复调用本方法。直至查到不存在上一级目录ID,那么$arr数组的最后一个即是最大的目录ID。
这就是递归的一个非常简单的例子。我发现自己在做递归的时候非常容易犯的一个错误就是当其调用自身的时候老是会忘了传部分参数。递归方法内部调用本身时必须保证参数的个数及顺序是一样的!