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