PHP的递归函数返回数组

最后发布: 2015-02-25 06:10:07


问题

这是原始函数(递归函数):

function permute($items, $perms = array()) 
{
    if (empty($items)) 
    { 
        echo join('', $perms).'<br>';
    }  
    else 
    {
        for ($i = 0; $i < count($items); ++$i) 
        {
             $newitems = $items;
             $newperms = $perms;
             $foo = implode(array_splice($newitems, $i, 1));
             array_unshift($newperms, $foo);
             permute($newitems, $newperms);
        }
    }
}
permute(array("A", 'B', 'C'));

在这种情况下,输出将是:

cba
bca
cab
acb
bac
abc

如何修改此部分:

if (empty($items)) 
{ 
    echo join('', $perms).'<br>';
} 

更改它以返回字符串数组,而不是直接在函数中回显?

php arrays recursion return
回答

试试这个( IdeOne示例 ):

function permute($items, $perms = array(), $result = array()) 
{
if (empty($items)) 
{ 
    $result[] = join('', $perms);
}  
else 
{
    for ($i = 0; $i < count($items); ++$i) 
    {
         $newitems = $items;
         $newperms = $perms;
         $foo = implode(array_splice($newitems, $i, 1));
         array_unshift($newperms, $foo);
         $result = permute($newitems, $newperms, $result);
    }
}
return $result;
}
$bar = permute(array("A", 'B', 'C'));

var_dump($bar);