階乗・順列・組合せ

階乗(Factorial)

※3! = 3*2*1
※0!は1

//	factorial n!
public static long factorial(int n) {
  if (n<=1)
    return 1;
  else 
    return n * factorial(n-1);
}

順列(Permutation):並べる順番を区別する

nPm = n!/(n-m)!

証明)abcdeから3つ取って一列に並べる
n=5,m=3
5*4*3 = 5!/2! = 5!/(5-3)!

例)abcを一列に並べる(=つまりabcから三個とって一列に並べる)
3*2*1 = 3! = 3!/(3-3)!

組合せ(Combination):並べる順番に区別無し

nCr = nPr / r! = n! / r!(n-r)!
【Tips】nC1 = n,nCn = 1,nC0 = 1,nCr = nCn-r

証明)abcdeから3つ選ぶ組み合わせ(順序関係なし)
もしabcdeから3つ取って一列に並べるならば、
5P3 = 3! * (組合せ)
(組合せ)= 順列/選ぶ数
5C3 = 5P3/3!