반응형
https://www.acmicpc.net/problem/10872
정수 N의 팩토리얼을 구하는 문제입니다.
간단하게 for문을 이용하여 구현할 수 있지만, 이번 파트는 재귀 함수 이기 때문에, 재귀 함수를 이용하여 문제를 풀어보도록 하겠습니다.
제가 알고리즘을 시작한지 얼마 되지 않아서 재귀 함수 같은 부분에 매우 약하다는 것을 깨달았습니다.
그래서 차근차근 재귀에 대해 분해해보았습니다.
함수를 실행했을 때, 리턴 값은 아래와 같습니다.
- return factorial(N) * factorial(N-1) * factorial(N-2) * factorial(N-3)... 2 * 1
5를 예를 들어보겠습니다.
- N = 5일 때, return 5 * factorial(N-1)
- N = 4일 때, return 5 * 4 * factorial(N-1)
- N = 3일 때, return 5 * 4 * 3 * factorial(N-1)
- N = 2일 때, return 5 * 4 * 3 * 2 * factorial(N-1)
- N = 1일 때, return 5 * 4 * 3 * 2 * 1 * factorial(N-1)
마지막에는 0이 곱해지면 안되기 때문에 if를 통해서 조건을 걸어줍니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// 백준 알고리즘 10872번
// 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.(재귀함수를 이용)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
int N_factorial = factorial(N);
bw.write(String.valueOf(N_factorial));
br.close();
bw.flush();
bw.close();
}
public static int factorial(int N) {
if(N == 0) {
return 1;
}else {
return N *factorial(N-1);
}
}
}
재밌네요. 재귀함수
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준 알고리즘][자바] 2447번 : 별 찍기 - 10 (0) | 2021.11.28 |
---|---|
[백준 알고리즘][자바] 10870번 : 피보나치 수 5 (0) | 2021.10.23 |
[백준 알고리즘][자바] 1002번 : 터랫 (0) | 2021.10.21 |
[백준 알고리즘][자바] 4153번 : 직각삼각형 (0) | 2021.10.17 |
[백준 알고리즘][자바] 3009번 : 네 번째 점 (0) | 2021.10.17 |
댓글