소개
이 실습에서는 C 프로그래밍에서 팩토리얼을 계산하는 방법을 배웁니다. 이 실습은 반복 루프와 재귀 함수를 사용하여 숫자의 팩토리얼을 계산하는 두 가지 방법을 다룹니다. 사용자로부터 정수 입력을 받은 후, 루프 기반 및 재귀적 접근 방식을 모두 사용하여 팩토리얼을 계산하고, 마지막으로 결과를 출력합니다.
이 실습은 단계별 지침과 코드 예제를 제공하여 C 에서 팩토리얼 계산 과정을 포괄적으로 이해하도록 안내합니다.
정수 n 입력
이 단계에서는 C 프로그램에서 팩토리얼을 계산하기 위해 정수 입력을 받는 방법을 배웁니다. 사용자에게 숫자를 입력하도록 요청하고, 이를 후속 계산을 위해 저장하는 간단한 프로그램을 만드는 데 중점을 둡니다.
먼저 프로젝트 디렉토리에 새로운 C 파일을 생성합니다.
cd ~/project
nano factorial.c
이제 정수 입력을 읽는 다음 코드를 추가합니다.
#include <stdio.h>
int main() {
int n;
printf("팩토리얼을 계산할 숫자를 입력하세요: ");
scanf("%d", &n);
printf("입력한 숫자: %d\n", n);
return 0;
}
이제 프로그램을 컴파일하고 실행해 봅시다.
gcc factorial.c -o factorial
./factorial
예시 출력:
팩토리얼을 계산할 숫자를 입력하세요: 5
입력한 숫자: 5
이 코드에서:
printf()는 사용자에게 프롬프트를 표시하는 데 사용됩니다.scanf()는 사용자로부터 정수 입력을 읽습니다.%d는 정수를 위한 형식 지정자입니다.&n은 입력을 저장하기 위해n변수의 메모리 주소를 전달합니다.
루프 또는 재귀를 사용한 n! 계산
이 단계에서는 반복 루프와 재귀 함수를 사용하여 숫자의 팩토리얼을 계산하는 두 가지 방법을 배웁니다. 이전 factorial.c 파일을 수정하여 두 가지 접근 방식을 구현할 것입니다.
factorial.c 파일을 업데이트합니다.
cd ~/project
nano factorial.c
루프와 재귀를 사용하여 팩토리얼 계산을 구현하는 다음 코드를 추가합니다.
#include <stdio.h>
// 반복 루프를 사용한 팩토리얼 계산
unsigned long long factorialLoop(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
// 재귀를 사용한 팩토리얼 계산
unsigned long long factorialRecursive(int n) {
if (n == 0 || n == 1) {
return 1;
}
return n * factorialRecursive(n - 1);
}
int main() {
int n;
printf("팩토리얼을 계산할 숫자를 입력하세요: ");
scanf("%d", &n);
if (n < 0) {
printf("음수에 대한 팩토리얼은 정의되지 않습니다.\n");
return 1;
}
printf("루프를 사용한 팩토리얼: %llu\n", factorialLoop(n));
printf("재귀를 사용한 팩토리얼: %llu\n", factorialRecursive(n));
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc factorial.c -o factorial
./factorial
예시 출력:
팩토리얼을 계산할 숫자를 입력하세요: 5
루프를 사용한 팩토리얼: 120
재귀를 사용한 팩토리얼: 120
이 구현의 주요 내용:
- 더 큰 팩토리얼 값을 처리하기 위해
unsigned long long을 사용합니다. - 루프 방법은
for루프를 사용하여 숫자를 곱합니다. - 재귀 방법은 기저 사례에 도달할 때까지
n-1로 자신을 호출합니다. - 음수에 대한 오류 처리가 추가되었습니다.
- 두 가지 방법 모두 동일한 결과를 생성합니다.
팩토리얼 출력
이 단계에서는 팩토리얼 계산 프로그램을 개선하여 더 자세한 출력을 제공하고 다양한 입력 시나리오를 처리합니다. 팩토리얼 결과의 표현을 개선하기 위해 factorial.c 파일을 수정할 것입니다.
factorial.c 파일을 업데이트합니다.
cd ~/project
nano factorial.c
이전 내용을 다음 개선된 구현으로 바꿉니다.
#include <stdio.h>
unsigned long long factorialLoop(int n) {
unsigned long long result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
void printFactorialDetails(int n, unsigned long long factorial) {
printf("팩토리얼 계산 세부 정보:\n");
printf("숫자 (n): %d\n", n);
printf("팩토리얼 (n!): %llu\n", factorial);
printf("팩토리얼 전개: ");
for (int i = 1; i <= n; i++) {
printf("%d%s", i, (i < n) ? " × " : " = ");
}
printf("%llu\n", factorial);
}
int main() {
int n;
printf("팩토리얼을 계산할 음이 아닌 정수를 입력하세요: ");
scanf("%d", &n);
if (n < 0) {
printf("오류: 음수에 대한 팩토리얼은 정의되지 않습니다.\n");
return 1;
}
if (n > 20) {
printf("경고: 큰 숫자의 팩토리얼은 정수 오버플로우를 발생시킬 수 있습니다.\n");
}
unsigned long long result = factorialLoop(n);
printFactorialDetails(n, result);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc factorial.c -o factorial
./factorial
예시 출력:
팩토리얼을 계산할 음이 아닌 정수를 입력하세요: 5
팩토리얼 계산 세부 정보:
숫자 (n): 5
팩토리얼 (n!): 120
팩토리얼 전개: 1 × 2 × 3 × 4 × 5 = 120
이 버전의 주요 개선 사항:
- 자세한
printFactorialDetails()함수를 추가했습니다. - 전체 팩토리얼 전개를 표시합니다.
- 큰 숫자에 대한 경고를 포함했습니다.
- 명확하고 정보적인 출력을 제공합니다.
요약
이 실험에서는 사용자로부터 정수 입력을 받고 반복 루프와 재귀 함수를 사용하여 팩토리얼을 계산하는 방법을 배웠습니다. 사용자에게 숫자를 입력하도록 요청하고, 음수 입력을 처리하며, 팩토리얼 결과를 출력하는 C 프로그램을 만드는 과정을 탐구했습니다. 이 실험에서는 사용자 입력 읽기, 팩토리얼 계산 알고리즘 구현 및 최종 결과 출력의 핵심 단계를 다루었습니다.



