PHP中的堆算法实现产生错误的结果
下面是一个基于堆算法的PHP函数,用于查找置换。该函数在JavaScript中工作正常,但在PHP中失败。为什么?PHP中的堆算法实现产生错误的结果,php,permutation,Php,Permutation,下面是一个基于堆算法的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);
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", "b", "a" ],
[ "b", "c", "a" ],
[ "a", "b", "c" ],
[ "b", "a" ,"c" ]
给你:
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);
函数交换(&$x,&$y){
列表($x,$y)=数组($y,$x);
}
函数生成($n,&$A){
如果($n==1){
回声“;
印刷费($A);
回声“;
返回$A;
}否则{
对于($i=0;$i<$n-1;$i++){
生成($n-1,$A);
如果($n%2)==0){
掉期($A[$i],$A[$n-1]);
}否则{
掉期($A[$n-1],$A[0]);
}
}
生成($n-1,$A);
}
}
$A=数组('A','b','c');
产生(3美元/年);
预期的结果/输出是什么,您实际得到了什么?这并不能回答我的问题。另外,不要使用评论来添加额外的信息;请编辑您的问题一个更好的变量交换技术是我错过的技巧。谢谢你给我指明了正确的方向。
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);