아래의 소스는
Visual Studio 2010 Express (Visual C++ 10.0),
MinGW & GNU C 3.4.5 (gcc),
로 테스트되었다. long 타입의 한계로 인하여 13! 까지만 정확히 계산되었다.
* 소스 파일명: recursiveFactorial.c
#include <stdio.h>
long recFacto(long y, int k, int n) {
if (n <= 1)
return 1L;
else if (k == n)
return y;
return recFacto(y*(k+1), k+1, n);
}
long factorial(int n) {
return recFacto(1L, 1, n);
}
int main(int argc, char *argv[]) {
int n = 20;
int i;
for (i = 0; i <= n; i++) {
printf("%d! = %ld\n", i, factorial(i));
if (i == 13)
printf("-- below calc are fault ----\n");
}
}
실행 결과:
프롬프트> recursiveFactorial
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 1932053504
-- below calc are fault ----
14! = 1278945280
15! = 2004310016
16! = 2004189184
17! = -288522240
18! = -898433024
19! = 109641728
20! = -2102132736
'프로그래밍 > C' 카테고리의 다른 글
ISOC99 를 지원하는 C 컴파일러로 복소수 계산하는 C 예제 (0) | 2012.04.28 |
---|---|
C 언어로 GMP 라이브러리를 이용하여 30! 까지 정확하게 계산하기 (3) | 2010.08.13 |
스트링 배열 정렬(sorting)하기 with C (0) | 2009.04.17 |
손으로 계산하는 긴 자리 곱셈표 만들기 with C (0) | 2009.03.07 |
여러 가지 무료 C 컴파일러를 위한 컨솔 입력 테스트 for C (0) | 2009.02.07 |