この再帰関数の結果を返す最もクリーンな方法は何ですか?再帰結果スタック
現時点では、一番上の呼び出しを返すのは当然です。
///////これは完全な関数で、ここで末尾再帰を使用できますか?出力は、値を渡すときに構築している配列です。
<?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;
}
?>
ハハいいえ、問題の重要でない部分を抽象化するのは良い方法でした。また、私はここで起こった他の人のためにこのリンクを見つけました。 http://www.c2.com/cgi/wiki?TailRecursion – Prospero
私はテール再帰の利点を理解していますが、私はそれを上記の質問で編集した関数にどのように適用できますか? – Prospero