팩토리얼이란
- 팩토리얼이란 한글로 '계승'을 뜻하며 1에서 n까지의 모든 자연수를 곱하는 것을 의미한다.
- 팩토리얼은 ! 기호로 표기한다.
- ex. 3! = 1 * 2* 3 = 6 // 4! = 1 * 2* 3* 4 = 24
팩토리얼 구현 - 반복문
- 인자로 정수 n을 받음.
- 곱셈 연산의 결과를 저장할 result 변수 선언 후 1로 초기화
- for문을 사용하여 초기식, 조건식, 증감식은 다음과 같이 작성함.
- 첫 번째 반복 : result = result * i(1) -> 1 * 1
- 두 번째 반복 : result = result * i(2) -> 1 * 2
- 세 번째 반복 : result = result * i(3) -> 2 * 3
- ...
- n 번째 반복 : result = result * i(n) -> (n-1)! * n
class Factorial {
public int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++){
result *= i;
}
return result;
}
}
팩토리얼 구현 - 재귀
- factorial(n)이 호출되어 n이 0보다 크다면 n * factorial(n - 1)을 반환
- 위의 곱셈 연산을 수행하기 위해 factorial(n - 1)을 호출한다.
- factorial(n - 1)이 호출되어 다시 n - 1의 값이 0보다 크다면 (n - 1) * factorial((n - 1) - 1)을 반환
- 위의 곱셈 연산을 수행하기 위해 factorial((n - 1) - 1)을 호출한다.
- factorial((n - 1) - 1)이 호출되어 다시 ((n - 1) - 1)의 값이 0보다 크다면 ((n - 1) - 1) * factorial(((n - 1) - 1) - 1)을 반환
- 위의 곱셈 연산을 수행하기 위해 factorial(((n - 1) - 1) - 1)을 호출한다.
- 위의 과정이 계속 반복되다가 n이 0보다 크다는 조건이 false일 때 1을 리턴하며 위에서 대기 중인 곱셈 연산을 수행하기 위해 올라간다.
class Factorial {
public int factorial(int n) {
return n > 0 ? n * factorial(--n) : 1;
/*
if (n < 0) {
return 1;
}
return n * factorial(n - 1);
*/
}
}
'Computer Science > Algorithm' 카테고리의 다른 글
[Java] 재귀 (0) | 2022.07.31 |
---|