본문 바로가기
Algorithm/Baekjoon

[백준 알고리즘][자바] 10872번 : 팩토리얼

by hyunipad 2021. 10. 23.
반응형

https://www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

정수 N의 팩토리얼을 구하는 문제입니다.

간단하게 for문을 이용하여 구현할 수 있지만, 이번 파트는 재귀 함수 이기 때문에, 재귀 함수를 이용하여 문제를 풀어보도록 하겠습니다.

 

제가 알고리즘을 시작한지 얼마 되지 않아서 재귀 함수 같은 부분에 매우 약하다는 것을 깨달았습니다.

그래서 차근차근 재귀에 대해 분해해보았습니다.

 

함수를 실행했을 때, 리턴 값은 아래와 같습니다.

  • return factorial(N) * factorial(N-1) * factorial(N-2) * factorial(N-3)... 2 * 1

5를 예를 들어보겠습니다.

  1. N = 5일 때, return 5 * factorial(N-1)
  2. N = 4일 때, return 5 * 4 * factorial(N-1)
  3. N = 3일 때, return 5 * 4 * 3 * factorial(N-1)
  4. N = 2일 때, return 5 * 4 * 3 * 2 * factorial(N-1)
  5. 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);
		}
	}

}

재밌네요. 재귀함수

반응형

댓글