//////
Search
📒

Exponential Computation Comparison

소스코드

1. Iteration

#include <stdio.h> #include <time.h> // 참조 연산자를 통해 넘겨받은 주소값으로부터 값을 참조합니다. void iteration(int *base, int *exp) { int result = 1; // 반복적 연산 수행 for(int i=0; i<*exp; i++) { result *= *base; } printf("Iteration 결과값 : %d\n", result); } int main(void) { int base; int exponential; printf("Input a Base : "); scanf("%d", &base); printf("Input an Exponential : "); scanf("%d", &exponential); // 입력받은 두 값에 대한 포인터 설정 int *base_pointer = &base; int *exponential_pointer = &exponential; clock_t start = clock(); // 포인터의 주소값을 넘겨줍니다 iteration(base_pointer, exponential_pointer); clock_t end = clock(); printf("반복 방법\n걸린 시간 : %ld 클록 틱\n", end-start); return 0; }
C
복사

2. Recursion(Simple version)

#include <stdio.h> #include <time.h> int recursion_simple(int base, int exp) { // 심플버전 순환 수행 if(exp == 0) { return 1; } else { return base * recursion_simple(base, exp-1); } } int main(void) { int base; int exponential; printf("Input a Base : "); scanf("%d", &base); printf("Input an Exponential : "); scanf("%d", &exponential); clock_t start = clock(); // 포인터 말고 그냥 복사값 넘기기 int result = recursion_simple(base, exponential); clock_t end = clock(); printf("순환 방법(심플버전) 결과값 : %d\n", result); printf("걸린 시간 : %ld 클록 틱\n", end-start); return 0; }
C
복사

3. Recursion(Efficient version)

#include <stdio.h> #include <time.h> int recursion_efficient(int base, int exp) { // 효율 버전 순환 수행 if(exp == 0) { return 1; } else if((exp%2) == 0) { return recursion_efficient(base*base, exp/2); } else { return base*recursion_efficient(base*base, (exp-1)/2); } } int main(void) { int base; int exponential; printf("Input a Base : "); scanf("%d", &base); printf("Input an Exponential : "); scanf("%d", &exponential); clock_t start = clock(); // 포인터 말고 그냥 복사값 넘기기 int result = recursion_efficient(base, exponential); clock_t end = clock(); printf("순환 방법(효율 버전) 결과값 : %d\n", result); printf("순환 방법(심플버전)\n걸린 시간 : %ld 클록 틱\n", end-start); return 0; }
C
복사

결과

반복
순환(심플 버전)
순환(효율 버전)

고찰

디버깅 실패해서 어느 값에서 스택 오버플로우가 발생하는지 확인하지 못했습니다.
VSCode로 작업을 했는데, 기본 디버깅 설정이 잘못되어있는건지, 결과값은 잘 출력이 되는데 디버깅에서는 변수가 값이 제대로 반영이 안된 채로 디버깅이 지속되어서, 좀 더 디버깅 콘솔을 만져보면서 어떻게 사용해야하는지 찾아봐야할 것 같습니다.