以下是一个PHP中实现全排列的递归算法示例代码:
<?php
function permute(&$arr, $start, &$result) {
// 如果当前排列的长度等于原数组长度,则将其添加到结果数组中
if ($start == count($arr)) {
$result[] = $arr;
return;
}
for ($i = $start; $i < count($arr); $i++) {
// 交换元素
list($arr[$start], $arr[$i]) = array($arr[$i], $arr[$start]);
// 递归调用,处理下一个位置
permute($arr, $start + 1, $result);
// 回溯,恢复数组到之前的状态
list($arr[$start], $arr[$i]) = array($arr[$i], $arr[$start]);
}
}
// 示例数组
$input = [1, 2, 3];
$result = [];
// 调用函数,从第一个元素开始
permute($input, 0, $result);
// 输出结果
echo "全排列结果:\n";
foreach ($result as $permutation) {
echo implode(',', $permutation) . "\n";
}
?>
这段代码定义了一个`permute`函数,它接受三个参数:一个数组`$arr`,一个起始索引`$start`(用于递归过程中的位置控制),以及一个用于存储所有排列结果的数组`$result`。函数通过递归地交换数组中的元素并继续处理剩余的数组部分来生成所有可能的排列。每当完成一个排列时,就将其添加到结果数组中。注意,这里使用了回溯技巧来撤销之前的交换操作,以便尝试其他的排列组合。
在示例中,我使用了一个包含三个元素的数组`[1, 2, 3]`来演示算法的执行过程,并打印出了所有可能的全排列结果。