본문 바로가기
수학

수학- 팩토리얼 , 조합 ,순열 (Java 기본 코드)

by ddahu 2023. 2. 7.

팩토리얼(Factorial) : 1~n 까지의 모든 자연수의 곱(n!) 

n! = n(n-1)(n-2) ... 1

 

팩토리얼은 기본적으로 재귀함수 구현이 제일 쉽다

 

  • 재귀X
int n  = 5;
int result = 1;
for (int i = 1; i <=n ; i++) {
    result *= i;
}
System.out.println("result = " + result);

 

for 문을 활용해서 1부터 n 까지 순차적으로 곱한값.

  • Java에 IntStream을 활용한 factorial
IntStream.range(2,n+1).reduce(1,(x,y)->(x*y))

 

IntStream으로 범위를 지정해서 reduce 함수를 통해 초기값 1부터 곱해나가는 식이다. 

python에서는 reduce (lambda x,y : x*y ,[i for i in range(1,6) ], 1) 이랑 같음

 

  • 재귀O
public static int refac(int num){
        if(num == 1 ){
            return 1;
        }
        return num * refac(num-1);
 }

순열 (Permutation) : 순서를 정해서 나열

서로 다른 n개 중에서 r개를 선택하는 경우의 수( 순서 O, 중복 X)

n! / (n-r) !

n = 5;
int r = 3 ;
result = 1;
for (int i = n; i >=n-r+1 ; i--) {
    result *=i;
}
System.out.println("result = " + result);

 

 


중복 순열 : 서로 다른 n개 중에 r개를 선택하는 경우의수 ( 순서 O , 중복 O

중복을 허용 하기 때문에 경우의 수는 식과 같다.

n^r

n = 5;
r=3;
result = 1;
for (int i = 0; i < r; i++) {
	result *=n;
}
System.out.println("result = " + result);
  • Math 함수 활용
System.out.println(Math.pow(n,r));

n제곱 r 이기 때문에 pow 함수를 사용할 수 있다.


원 순열 : 원 모양의 테이블에 n개의 원소를 나열하는 경우의 수

기본 순열 관점에서 봤을때는 A B C 랑 B C A , C A B 등 원테이블 관점에서 봤을때는 같은 경우의 수이기 때문에  

만약 원 모양의 테이블에 3명을 앉히는 경우의 수는 식과 같다.

 n! / n = (n-1)!

n=3;
result =1;
for (int i = 1; i <n ; i++) {
    result *= i;
}

System.out.println("result = " + result);