【发布时间】:2014-01-07 04:54:23
【问题描述】:
我想知道我的算法是否是尾递归的;我刚刚制作了这个函数来漂亮地打印 PHP 中的数组:
function get_pretty_output($value, $first=true, $indent = ''){
if (!is_array($value)) { return $value.PHP_EOL; }
if (empty($value)) { if ($first) { return 'Array()'.PHP_EOL; } else { return preg_replace('/ /', '', $indent, 1).')'.PHP_EOL; }}
if ($first) {
$output = 'Array'.PHP_EOL.$indent.'('.PHP_EOL;
$indent .=' ';
$first = false;
} else {
$output = '';
}
reset($value);
$key = key($value);
return $output .= $indent .
'[' .
$key .
'] => ' .
get_pretty_output(array_shift($value), true, $indent) .
get_pretty_output($value, $first, $indent);
}
因为两者都没有
$pretty_string = print_r($array, true);
也没有
ob_start();
var_dump($array);
$pretty_string = ob_get_contents();
ob_end_clean();
即使使用ignore_user_abort(true) (PHP 5.6),客户端断开连接时似乎也能正常工作。
我什至不知道 PHP 是否从尾递归中受益(有人告诉我没有),但无论如何我想知道这是否是一个有效的例子。我不这么认为(它需要保存函数上下文以在第二次调用时使用),但我似乎无法找到等效的尾递归算法。有没有我可以遵循的方法?
【问题讨论】:
-
嗯...寻找的人可能对以下内容感兴趣:Does PHP optimize tail recursion?。
标签: php algorithm recursion pretty-print tail-recursion