Algorithm/Baekjoon(Node.js)

[JavaSrcipt] Baekjoon - 10872 : 팩토리얼

비망노트 2021. 10. 9. 18:33

문제

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

입력

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

출력

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

예제입력 예제출력
10 3628800
0 1

 

⭕ 풀이

const input=Number(require('fs').readFileSync('/dev/stdin').toString());

function factorial(x){
    if(x<0){return;}
    else if(x===0){return 1;}
    
    return x * factorial(x-1);
    
}console.log(factorial(input));

 

✅ 팩토리얼

1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.

0!=1로 약속하고, n이 대단히 큰 경우 스털링의 공식을 써서 근삿값을 구할 수 있다.

1부터 n개의 양의 정수를 모두 곱한 것을 n계승이라 하고, n!로 나타낸다.

즉, n! = 1×2×3×……×(n-1)×n이다. n은 보통 양의 정수 범위에서 주어진다.

n!=n×(n-1)!의 성질에서 n이 1일 때 1=1×0! 이 되므로 0!=1로 약속한다.

factorial(10)을 실행하게되면

x=10이므로 10* factorial(10-1)

factorial(9)를 실행하게되면 9*factorial(9-1)

 

이렇게 쭈욱 반복하다가

x=1 1*factorial(1-1)

factorial(0)이 되면

x===0이 충족되므로 1을 반환한다.

그럼 다시 역으로 올라가면

factorial(1)은 1*1 즉 1이라는게되고

factorial(2)는 x즉2  * fac(1)즉1  2*1 =2가된다.

factorial(3)은 x즉3 * fac(2)즉2 3*2 6

 

(x===0){ return 1}이 기반조건이 된다.

 

 

 

 

-출처

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