Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使此函数尾部递归?_Php_Algorithm_Recursion_Pretty Print_Tail Recursion - Fatal编程技术网

Php 如何使此函数尾部递归?

Php 如何使此函数尾部递归?,php,algorithm,recursion,pretty-print,tail-recursion,Php,Algorithm,Recursion,Pretty Print,Tail Recursion,我想知道我的算法是否是尾部递归的;我刚刚使用此函数在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_repla

我想知道我的算法是否是尾部递归的;我刚刚使用此函数在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\u string=print\r($array,true)

也不是

即使使用
ignore\u user\u abort(true)
(PHP5.6),当客户端断开连接时似乎也能工作


我甚至不知道PHP是否能从尾部递归中获益(有人告诉我不会),但无论如何,我想知道这是否是一个有效的例子。我不这么认为(它需要保存函数上下文以便在第二次调用中使用),但我似乎无法找到等效的尾部递归算法。有什么方法可以遵循吗?

这不是尾部递归的例子,因为在返回值之后,在早期的递归调用中仍在进行计算。考虑前面StAdvExcel POST()中提供的示例。在这种情况下,“=”运算符将完成串联,然后在函数中返回结果


要使此尾部递归,您需要修改代码,在进行递归调用之前打印“output”变量。。。正在寻找的人可能对以下内容感兴趣:。
ob_start(); 
var_dump($array); 
$pretty_string = ob_get_contents(); 
ob_end_clean();