下面是一个基于Heap算法的PHP函数,用于查找排列。该函数在JavaScript中运行良好但在PHP中失败。为什么?
function generate($n,$A) {
if ($n === 1) {
var_dump($A);
return $A;
} else {
for ($i = 0; $i < $n - 1; $i++) {
generate($n - 1, $A);
if ($n % 2 === 0) {
$t = $A[$i];
$A[$i] = $A[$n - 1];
$A[$n - 1] = $t;
}else {
$t = $A[0];
$A[0] = $A[$n - 1];
$A[$n - 1] = $t;
}
}
generate($n - 1, $A);
}
}
generate(3,array('a','b','c'));
该功能的输出应如下:
[ "a", "b", "c" ],
[ "b", "a", "c" ],
[ "c", "a", "b" ],
[ "a", "c", "b" ],
[ "b", "c", "a" ],
[ "c", "b", "a" ],
但我明白了:
[ "a", "b", "c" ],
[ "b", "a", "c" ],
[ "c", "b", "a" ],
[ "b", "c", "a" ],
[ "a", "b", "c" ],
[ "b", "a" ,"c" ]
答案 0 :(得分:0)
你走了:
function swap(&$x, &$y) {
list($x, $y) = array($y, $x);
}
function generate($n, &$A) {
if($n === 1) {
echo "<pre>";
print_r($A);
echo "</pre>";
return $A;
} else {
for($i = 0; $i < $n - 1; $i++) {
generate($n - 1, $A);
if(($n % 2) === 0) {
swap($A[$i], $A[$n - 1]);
} else {
swap($A[$n - 1], $A[0]);
}
}
generate($n - 1, $A);
}
}
$A = array('a','b','c');
generate(3, $A);