將這個遞歸函數的結果返回的最簡潔的方法是什麼?遞歸結果堆棧
function recursion_trigger($input, $count = 0){
if(!empty($input)){
array_pop($input);
$count++;
if(!empty($input)){
recursion_trigger($input,$count);
}
}
echo $count;
return $count;
}
目前它正在返回最上面的電話當然是一個。
///////作爲一個額外的問題,這是完整的功能,你可以在這裏使用尾遞歸嗎?輸出是一個數組,我正在構建,因爲我通過值。
<?php
//Page best viewed from page source
//Takes an array of objects that have ID and Parent and organizes the tree into an array representing a set of objectID's by depth
// poor spelling ahead =P
function level_keys($array,$depth=-1,$level=0,$output=null){
// initialize the functions parameters run once at start and not in subsequent self calls
if($level == 0 && $depth != 0){
$output[][]=0;
$level++;
foreach($array as $key=>$node){
if($node->parent==0){
$output[$level][] = $node->id;
unset($array[$key]);
}
}
unset($key); unset($node);
$level++;
$depth--;
}
// set recursion loop and run main part of function
if ( !empty($array) && $depth != 0){
echo 'depth:'.$depth."\n";
foreach($output[$level-1] as $parent){
foreach($array as $key=> $child){
if($parent == $child->parent){
$output[$level][] = $child->id;
unset($array[$key]);
}
}
}
unset($id); unset($parent); unset($key); unset($child);
$depth--;
$level++;
if(!empty($array) && $depth !=0){
// make sure to pass the output back out to the top most level
$output = level_keys($array,$depth,$level,$output,$depth_at);
}
}
return $output;
}
?>
謝謝你完全是這樣。我明白它爲什麼可行,但我仍然無法想象它是如何工作的。 – Prospero 2011-01-30 15:36:47
@Doodle:查看更新後的帖子。 – 2011-01-30 15:41:50