求将一段递归代码改成非递归形式
程序员文章站
2022-06-08 09:20:24
...
求将一段递归代码改为非递归形式
------解决方案--------------------
怎么就不知道与人方便,与己方便的道理呢?
消除递归就是用自己的堆栈,代替系统的堆栈
------解决方案--------------------
function delRecursive($id,$class_arr)
{
if($id=="") $id=0;
for($i=0;$iif($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;$iif(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 }
function delRecursive($id, $class_arr)
{
if($id=="") $id=0;
for($i=0;$iif($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;$iif(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