팩토리얼(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);'수학' 카테고리의 다른 글
| 수학 - 순열( Permutation) JAVA (Visited, swap) (0) | 2023.02.07 |
|---|---|
| python - 약수, 최대공약수, 최소공배수 (0) | 2023.02.07 |
| 수학- 약수 , 최대공약수 , 최소공배수 (JAVA) (0) | 2023.02.07 |
| 수학-경우의 수 (Python) (0) | 2023.02.07 |