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

의 흐름으로 진행된다.

 

기저조건과 반환값, 실행할코드 등등 문제에따라 구현하고싶은대로 설정하면된다.

 

 

-출처

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