문제


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

첫째 줄에 정수 N(0 ≤ N ≤ 20)이 주어진다.

첫째 줄에 N!을 출력한다.

IO example : 10 입력 → 출력 3628800

풀이


#include <stdio.h>
long long int factorial(long long int n){
    if(n==0)
        return 1;
    else
        return n*factorial(n-1);
}

int main(){
    long long int num;
    scanf("%lld",&num);
    printf("%lld",factorial(num));
    return 0;
}

팩토리얼은 1부터 n까지의 모든 정수의 곱을 의미한다.

예를 들어, 5! = 54321=120이다.

long long int factorial(long long int n) 로 n을 저장하고, n의 팩토리얼 값을 계산하여 반환한다.

  1. if(n==0)으로 n이 0일 경우, 팩토리얼의 정의에 따라 1을 반환합니다. (0≠1)
  2. 그렇지 않으면, return n*factorial(n-1)을 통해 n과 n-1의 팩토리얼 값을 재귀적으로 곱하여 반환합니다.

재귀함수는 탈출문이 없는 경우 무한으로 함수를 호출하기 때문에 탈출 조건을 명시해줘야 한다. n이 0일때 1을 return하고 종료시키는 조건을 넣었다.

n이 0이 아닐 때에는 return n*factorial(n-1)을 통해 자기 자신을 계속해서 호출한다.