글 작성자: 취업중인 피터팬
728x90

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

 

27433번: 팩토리얼 2

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

www.acmicpc.net

 

문제 설명

 

재귀를 이용하여 팩토리얼을 구현하는 문제입니다.

 

문제 풀이

 

사실 재귀를 이용해 팩토리얼을 구현하는 것은 어렵지 않습니다.

하지만 이 문제에는 함정이 있습니다. n이 0부터 20까지 라는 것입니다.

얼핏 보면 숫자가 작아보이지만 팩토리얼로 계산하면 굉장히 큰 숫자가 됩니다.

그래서 자료형을 int가 아닌 long으로 해주어야 합니다.

import java.util.Scanner;

public class Number_27433 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        long n = sc.nextInt();

        System.out.println(factorial(n));
    }

    public static long factorial(long n){
        if(n==0) return 1;
        else if(n==1) return n;
        else return factorial(n-1)*n;
    }
}

재귀는 5를 입력했을 경우 5,4,3,2,1로 입력되고 factorial(1)*2 -> factorial(2)*3 -> factorial(6)*4 -> factorial(24)*5 -> 120 이 도출 됩니다.