求将一段递归代码改为非递归形式
<br />function delRecursive($id,$class_arr)<br />{<br /> if($id=="") $id=0;<br /> for($i=0;$i<count($class_arr);$i++){<br /> if($class_arr[$i][3]==$id){<br /> $subid=$class_arr[$i][0];<br /> $this->db->delete('tree', array('id' => $id));<br /> $this->db->delete('tree', array('id' => $subid)); <br /> delRecursive($subid,$class_arr);<br /> } <br /> }<br />}<br />
——解决方案——————–
怎么就不知道与人方便,与己方便的道理呢?
消除递归就是用自己的堆栈,代替系统的堆栈
$ar = array(<br /> array( "1", "0", "顶级分类1", "0", "1"),<br /> array("713", "0", "顶级分类2", "0", "1"),<br /> array("716", "0", "一级子分类1", "713", "1"),<br /> array("718", "0", "顶级分类3", "0", "1"),<br /> array("721", "0", "二级子分类1", "716", "1"),<br />);<br /><br />$id = 713;<br />delRecursive($id, $ar);<br />func($id, $ar);<br /><br />function func($id, $class_arr)<br />{<br /> if($id=="") $id=0;<br /> $st = array($id);<br /> do {<br /> $cnt = count($st);<br /> for($i=0;$i<count($class_arr);$i++){<br /> if(in_array($id = $class_arr[$i][3], $st)){<br /> $subid=$class_arr[$i][0];<br /> if(! in_array($subid, $st)) {<br /> $st[] = $subid;<br /><div style="color:transparent">!本文来源gaodai.ma#com搞##代!^码网(</div><sup>搞gaodaima代码</sup>echo "$id,$subid\n"; <br />// $this->db->delete('tree', array('id' => $id));<br />// $this->db->delete('tree', array('id' => $subid)); <br />// delRecursive($subid,$class_arr);<br /> }<br /> } <br /> }<br /> }while($cnt < count($st));<br />}<br /><br />function delRecursive($id, $class_arr)<br />{<br /> if($id=="") $id=0;<br /> for($i=0;$i<count($class_arr);$i++){<br /> if($class_arr[$i][3]==$id){<br /> $subid=$class_arr[$i][0];<br />// $this->db->delete('tree', array('id' => $id));<br />// $this->db->delete('tree', array('id' => $subid)); <br />echo "$id,$subid\n"; <br /> delRecursive($subid,$class_arr);<br /> } <br /> }<br />}
——解决方案——————–
$st = array($id);
do {
$cnt = count($st);
for($i=0;$i<count($class_arr);$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));