본문 바로가기
c++/c++

[c++] 팩토리얼 계산하기

by ilp 2024. 4. 28.
반응형

순서

  1. 반복문
  2. 재귀함수
  3. 동적 계획법
  4. tgamma

1. 반복문 사용

  • 'for'문을 사용해서 팩토리얼을 계산한다.
unsigned long long factorial(int n) {
    unsigned long long result=1;
    for (int i=1;<=n;i++) {
        result*=i;
    }
    return result;
}
  • 장점/단점
    • 장점: 구현이 간단하다, 작은 수에서 빠르게 동작한다.
    • 단점: 매우 큰 수에 대해 오버플로우가 발생할  수 있다.

2. 재귀함수 사용

  • '재귀함수'를 사용해서 팩토리얼을 계산한다.
    (함수 호출은 n을 하나씩 감소시키며 1에 도달할때 까지 계속한다.)
unsigned long long factorial(int n) {
    if (n==0) return 1;
    return n*factorial(n-1);
}
  • 장점/단점
    • 장점: 코드가 매우 간결한다.
    • 단점: 매우 큰 수에서 재귀가 깊어지면 오버플로우가 발생할  수 있다.

3. 동적 계획법

  • 이전의 결과를 저장하여 재사용해 중복 계산을 피한다.
unsigned long long factorial(int n) {
    vector<unsigned long long> dp(n+1, 1);
    for (int i=2;i<=n;i++) {
        dp[i]=i*dp[i-1];
    }
    return dp[n];
}
  • 장점/단점
    • 장점: 중복 계산이 없어 효율적으로 팩토리얼을 계산가능하다.
    • 단점: 추가 메모리 사용이 필요하다.

4. 'std::tgamma'함수 사용

  • 'std::tgamma' 함수는 감마 함수를 계산하며, 팩토리얼의 일반화된 형태를 제공한다.
#include <cmath>
#include <iostream>

unsigned long long factorial(int n) {
    return std::tgamma(n + 1);
}
  • 장점/단점
    • 장점: 코드가 짧다, 실수 값을 입력으로 받을 수 있고, 수학적으로 정확하다.
    • 단점:밀도가 떨어질 수 있고, 'double'의 한계로 매우 큰수에선 부정확 할 수 있다.

반응형

'c++ > c++' 카테고리의 다른 글

[c++] 알고리즘 문제 입출력 속도 향상 방법  (0) 2025.03.02
[c++] sort  (1) 2025.03.02
[c++] 소수점 자릿수 조절하기  (0) 2024.02.21
[c++]  (0) 2024.02.18
[c++] #include <bits/stdc++.h>  (0) 2024.02.18