当前位置:Gxlcms > PHP教程 > php用递归实现字符串的全排列?该怎么解决

php用递归实现字符串的全排列?该怎么解决

时间:2021-07-01 10:21:17 帮助过:29人阅读

php用递归实现字符串的全排列?
我想在程序中实现打印字符串的全排列,代码如下

function output ($src_arr)
{
foreach ($src_arr as $key => $value) {
$temp_arr = $src_arr;
echo $value;
if (! empty($temp_arr)) {
array_splice($temp_arr, $key, 1);
output($temp_arr);
return;
} else {
echo "
";
return;
}
}
}

$str = 'abc';
$src_arr = str_split($str);
output($src_arr);



但是结果只是打印abc,我想问一下究竟是什么原因,我感觉没什么问题,请大神指教!
------解决思路----------------------
$a = array(1,2,3);
perm($a, 0, count($a)-1);

function perm($ar, $k, $m) {
if($k == $m) echo join('',$ar), PHP_EOL;
else {
for($i=$k; $i<=$m; $i++) {
swap($ar[$k], $ar[$i]);
perm($ar, $k+1, $m);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}
如果按引用传递原始数组则
$a = array(1,2,3);
perm($a, 0, count($a)-1);

function perm(&$ar, $k, $m) {
if($k == $m) echo join('',$ar), PHP_EOL;
else {
for($i=$k; $i<=$m; $i++) {
swap($ar[$k], $ar[$i]);
perm($ar, $k+1, $m);
swap($ar[$k], $ar[$i]);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}
这个思路要比你的清晰吧?(移植的 C 代码)

人气教程排行