Algorithm/Baekjoon(Java)
[백준/JAVA] 10872 : 팩토리얼 ( 재귀 )
비망노트
2022. 8. 13. 13:21
문제
0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 N(0 ≤ N ≤ 12)이 주어진다.
출력
첫째 줄에 N!을 출력한다.
예제입력 | 예제출력 |
10 | 3628800 |
0 | 1 |
⭕ 풀이
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
System.out.println(factorial(num));
}
static int factorial(int x){
if(x==0){
return 1;
}else{
return x * factorial(--x);
}
}
}
우선 재귀함수에 대해 알고있어야 이해가 쉽다.
간단히 말해 자기자신을 호출해 작업을 수행하는 함수이다.
[Java] - JAVA - 재귀 ( recursion )
✅ 팩토리얼
팩토리얼이란 간단하게 말해, 1부터 그 수까지의 모든 자연수를 곱하는 것이다.
즉 4! 은 4*3*2*1 = 24 가 된다.
매개변수 x 를 -씩 줄여가며 자기자신을 호출하다 기저조건에 도달하게될경우
해당값을 연산에사용하여 문제를 풀이하게된다.
factorial(4) 를 호출했다면
factorial(4) = 4 * factorial(3) 을 반환하는것인데 이과정에서 자기자신인 factorial(3)이 호출된다
factorial(3) = 3 * factorial(2)
factorial(2) = 2 * factorial(1)
factorial(1) = 1 * factorial(0)
factorial(0)은 x==0의 if조건에 만족하므로 더이상 스스로를 호출하지않고 값을 내어준다.
fatorial(0) = 1
이제 이값을 끌고 거꾸로 올라가게되면
factorial(1) = 1 * 1
factorial(2) = 2 * 1
factorial(3) = 3 * 2
factorial(4) = 4 * 6
의 흐름으로 진행된다.
기저조건과 반환값, 실행할코드 등등 문제에따라 구현하고싶은대로 설정하면된다.
-출처