반응형
순서
- 반복문
- 재귀함수
- 동적 계획법
- 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 |