公式
有时候也表示成:
c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
2性质
c(n,m)=c(n,n-m);
3递推公式
c(n,m)=c(n-1,m-1)+c(n-1,m)
等式左边表示从n个元素中选取m个元素,而等式右边表示这一个过程的另一种实现方法:任意选择n中的某个备选元素为特殊元素,从n中选m个元素可以由此特殊元素的分成两类情况,即m个被选择元素包含了特殊元素和m个被选择元素不包含该特殊元素。
代码如下
//实现数学上的组合数算法
header("content-type:text/html;charset=utf-8");
/**
* 在数组$a中任意m个元素组合
*
* @param array $a 候选的集合
* @param int $n 候选的集合大小
* @param int $m 组合元素大小
* @param array $b 储存当前组合中的元素,这里储存的是元素键值
* @param int $M 相当一个常量,一直保持不变
* @return */
function combine($a,$n,$m,$b,$M){
for($i=$n;$i>=$m;$i--){
$b[$m-1]=$i-1;
if($m > 1){
$combine[]=combine($a,$i-1,$m-1,$b,$M);
}else{
$onecombine="";
for($j=$M-1;$j>=0;$j--){
$onecombine.=$a[$b[$j]];
}
$combine[]=$onecombine;
$onecombine="";
}
}
return $combine;
}
/**
* 递归输出数组
*
* @param array $arr 待输出的数组
* @return int 返回数组元素个数*/
function recursionarray($arr){
$i=0;
foreach($arr as $value){
if(is_array($value)){
$i+=recursionarray($value);
}else{
echo $value."
";
$i++;
}
}
return $i;
}
$a=array("A","B","C","D","E","F","G","H","I","J");
$b=array();
$combine=combine($a,10,5,$b,5);
$count=recursionarray($combine);
echo "总共有".$count."组合";
?>
http://m.bbyears.com/wangyetexiao/66887.html
推荐访问:php实现验证码 php实现分销