문제
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
의 흐름으로 진행된다.
기저조건과 반환값, 실행할코드 등등 문제에따라 구현하고싶은대로 설정하면된다.
-출처
'Algorithm > Baekjoon(Java)' 카테고리의 다른 글
[백준/JAVA] 17478 : 재귀함수가 뭔가요? ( 재귀 ) (0) | 2022.08.15 |
---|---|
[백준/JAVA] 10870 : 피보나치 수 5 ( 재귀 ) (0) | 2022.08.14 |
[백준/JAVA] 9020 : 골드바흐의 추측 ( 기본 수학 2 ) (0) | 2022.08.12 |
[백준/JAVA] 4948 : 베르트랑 공준 ( 기본 수학 2 ) (0) | 2022.08.11 |
[백준/JAVA] 1929 : 소수 구하기 ( 기본 수학 2 *소수 ) (0) | 2022.08.10 |