delete('tree', array('id' => $id))">
当前位置:Gxlcms > PHP教程 > 求将一段递归代码改成非递归形式

求将一段递归代码改成非递归形式

时间:2021-07-01 10:21:17 帮助过:16人阅读

求将一段递归代码改为非递归形式

function delRecursive($id,$class_arr)
{
if($id=="") $id=0;
for($i=0;$i if($class_arr[$i][3]==$id){
$subid=$class_arr[$i][0];
$this->db->delete('tree', array('id' => $id));
$this->db->delete('tree', array('id' => $subid));
delRecursive($subid,$class_arr);
}
}
}

------解决方案--------------------
怎么就不知道与人方便,与己方便的道理呢?

消除递归就是用自己的堆栈,代替系统的堆栈
$ar = array(
array( "1", "0", "顶级分类1", "0", "1"),
array("713", "0", "顶级分类2", "0", "1"),
array("716", "0", "一级子分类1", "713", "1"),
array("718", "0", "顶级分类3", "0", "1"),
array("721", "0", "二级子分类1", "716", "1"),
);

$id = 713;
delRecursive($id, $ar);
func($id, $ar);

function func($id, $class_arr)
{
if($id=="") $id=0;
$st = array($id);
do {
$cnt = count($st);
for($i=0;$i if(in_array($id = $class_arr[$i][3], $st)){
$subid=$class_arr[$i][0];
if(! in_array($subid, $st)) {
$st[] = $subid;
echo "$id,$subid\n";
// $this->db->delete('tree', array('id' => $id));
// $this->db->delete('tree', array('id' => $subid));
// delRecursive($subid,$class_arr);
}
}
}
}while($cnt < count($st));
}

function delRecursive($id, $class_arr)
{
if($id=="") $id=0;
for($i=0;$i if($class_arr[$i][3]==$id){
$subid=$class_arr[$i][0];
// $this->db->delete('tree', array('id' => $id));
// $this->db->delete('tree', array('id' => $subid));
echo "$id,$subid\n";
delRecursive($subid,$class_arr);
}
}
}

------解决方案--------------------

$st = array($id);
do {
$cnt = count($st);
for($i=0;$i if(in_array($class_arr[$i][3], $st)){
$subid=$class_arr[$i][0];
if(!in_array($subid, $st)) {
$st[] = $subid;
$this->DB_MT->delete('tree', array('id' => $id));
$this->DB_MT->delete('tree', array('id' => $subid));
}
}
}
}while($cnt < count($st));

人气教程排行