此代码,工作正常,最多6种组合。如果我用10个组合调用该函数,如下所示:print_r(combinationsOf_FUNQ(10,$ array));它提供了一个白页,而控制台也是白色的。任何想法为什么会发生这种情况?
for ($z = 1; $z <= 20; $z++) {
$array[]=$z;
}
function combinationsOf_FUNQ($n, $array){
if ($n === 0)
return array(array());
if (count($array) === 0)
return array();
$x = $array[0];
$TEMP = array_slice($array,1,count($array)-1);
$res1 = combinationsOf_FUNQ($n-1,$TEMP);
for ($i = 0; $i < count($res1); $i++) {
array_splice($res1[$i], 0, 0, $x);
}
$res2 = combinationsOf_FUNQ($n,$TEMP);
return array_merge($res1, $res2);
}
echo'<pre>';
print_r(combinationsOf_FUNQ(6,$array));
echo'</pre>';
答案 0 :(得分:2)
与此网站名称相同:) 堆栈溢出许多递归。你真的可以扩展大小,但你再次达到n = 15的极限值。
....在这里,你是我的解决方案 - 没有递归程序。你必须要注意的是,现在数组的主要索引并不是顺序的,但无论如何,子数组都是有序的,并且可以由foreach以正确的方式进行。 我也使用了内存扩展,因为数组看起来非常大。
<?php
for ($z = 1; $z <= 20; $z++) {
$array[]=$z;
}
ini_set('memory_limit',-1);
$n=10;
$res=array();
for($k=0;$k<$n;$k++){
$res[0][$k]=-1;
}
for($i=0;$i<$n;$i++){
foreach($res as $key=>$row){
if($row[$i]==-1){
foreach($array as $aa){
$ft=true;
for($j=0;$j<$i;$j++){
if($row[$j]>=$aa){
$ft=false;
break;
}
}
if($ft){
$tmp=array();
for($k=0;$k<$n;$k++){
if($k<$i){
$tmp[$k]=$row[$k];
}
elseif($k==$i){
$tmp[$k]=$aa;
}
else {
$tmp[$k]=-1;
}
}
$res[]=$tmp;
}
}
}
}
foreach($res as $key=>$row){
if($row[$i]==-1){
unset($res[$key]);
}
}
}
$ii=0;
foreach($res as $row){
$ii++;
echo $ii." => ( ";
foreach ($row as $a){
echo $a.' ';
}
echo ")<br/>";
}
?>
答案 1 :(得分:0)
我已经尝试过你的代码,当我尝试6时它工作正常但是当我尝试10时它给了我
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 72 bytes) in /opt/lampp/htdocs/test/index.php on line 43
所以当我使用ini_set('memory_limit', '-1');
超过内存时。
它工作正常,但需要一些时间才能完成运行