记一个简单的排列组合写法

记录一个简单的排列组合,差点被误导,果然我之前的是对的。

<?php
function c($str,$up){
    static $ic = 1;
    $length = strlen($str);
    if($length==1){
        echo sprintf("%03d",$ic++),":{$up}{$str}\n";
        return;
    }
    for($i=0;$i<$length;$i++){
        c(substr($str,0,$i).substr($str,$i+1),$up.$str[$i]);
    }
}
c("ABCD","");
001:ABCD   
002:ABDC   
003:ACBD   
004:ACDB   
005:ADBC   
006:ADCB   
007:BACD   
008:BADC   
009:BCAD   
010:BCDA   
011:BDAC   
012:BDCA   
013:CABD   
014:CADB   
015:CBAD   
016:CBDA   
017:CDAB   
018:CDBA   
019:DABC   
020:DACB   
021:DBAC   
022:DBCA   
023:DCAB   
024:DCBA

公式还是不能被误导,结果总数是n!=4*3*2*1=24

如果20个点,那么20!=2432902008176640000

也就是说,如果想用递归解决问题,可以省省了,还是遗传算法或A*搜索靠谱

当前还没有任何评论

写下你最简单的想法