当前位置: 代码迷 >> PHP >> php用递归实现字符串的全排列?该怎么解决
  详细解决方案

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

热度:54   发布时间:2016-04-28 17:12:36.0
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 "<br/>";
            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 代码)
  相关解决方案