关于阶乘

排列组合计算公式

排列的定义及其计算公式:从n个不同元素中,任取m个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列(m≤n,m与n均为自然数,下同);从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。A(n,m)=n(n-1)(n-2)……(n-m+1)= n!/(n-m)! 

此外规定0!=1(n!表示n(n-1)(n-2)...1,也就是6!=6x5x4x3x2x1。

综上,阶乘既是从n个不同元素,任取m=n 个元素的所有排列的个数。

递归阶乘算法:

private function factorial(value:Number):Number

{

   var s:Number;

   if(value > 1)

    {

      s = value * factorial(value -1);

    }

    else

    {

      return 1;

    }

     return s;

}

组合的定义及其计算公式:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。C(n,m)=A(n,m)/m!;C(n,m)=C(n,n-m)。(n≥m)

其他排列与组合公式 从n个元素中取出m个元素的循环排列数=A(n,m)/m!=n!/m!(n-m)!. n个元素被分成k类,每类的个数分别是n1,n2,...nk这n个元素的全排列数为 n!/(n1!×n2!×...×nk!). k类元素,每类的个数无限,从中取出m个元素的组合数为C(m+k-1,m)。

例:

排列:排队问题甲乙两人排队,先排甲,那么站法是甲乙,先排乙,那么站法乙甲,是两种不同的排法,和先排还是后排的顺序有关,所以是A(2,2)=2种
组合:从甲乙两个球中选2个,无论先取甲,在是先取乙,取到的两个球都是甲和乙两个球,和先后取的顺序无关,所以是C(2,2)=1种

总体说:
考虑排列顺序的,是排列;
不考虑排列顺序的,是组合。

原文地址:https://www.cnblogs.com/-yan/p/4768863.html