CAFE

bliss coffret

재귀호출과 반복문 비교

작성자bliss-은정|작성시간09.09.12|조회수816 목록 댓글 0

재귀호출과 반복문 중에서 어느 것이 효율적일까?

C 언어를 배우다가 이해가 안 되는 부분이 있었습니다. 화면으로 똑같이 출력되는 재귀호출 함수문과 반복문의 차이는 뭘까하는 거였죠. 차이를 모르니 어디에 어떤 문장을 써먹어야 할지 헛갈리는 겁니다. 그래서 아래 소스로 재귀함수문과 반복문을 비교했었습니다. 아마 문장을 거꾸로 바꿔주는 프로그램이었던 것 같은데, 2년이 지나서 소스도 제대로 못 보겠네요. (군대의 폐해. 제길슨...)


#include <stdio.h>
#include <time.h>

#define LIMIT 12

void reverse_a(char *);
void reverse_b(char *);

int main(void)
{
    char ctcode[LIMIT] = "안녕하세요?";
    long first, seconds;
    int i;

    first = time(NULL);
    for (i=0; i<100000000; i++) reverse_a(ctcode);
    seconds = time(NULL);
    printf("재귀호출출에서 소요된 시간은 %ld초\n", seconds-first);

    first = time(NULL);
    for (i=0; i<100000000; i++) reverse_b(ctcode);
    seconds = time(NULL);
    printf("반복문에서 소요된 시간은 %ld초\n", seconds-first);

    system("PAUSE");    
    return 0;
}

void reverse_a(char *line)
{
    char ch = *line;
    if (ch) {
        reverse_a(++line);
    }
}

void reverse_b(char *line)
{
    int i;
    for (i=0; i<LIMIT; i++) {
        if (*(line+(LIMIT-1)-i) == 0);
    }
}


그 결과는...

① 12번 반복시켰을 때 결과

 

사용자 삽입 이미지

 
② 36번 반복시켰을 때 결과

 

사용자 삽입 이미지

 
③ 60번 반복시켰을 때 결과

 

사용자 삽입 이미지

 
재귀호출은 문자열 함수의 크기에 상관없이 일정한 수행속도를 가졌습니다. 그러나 반복문은 수행횟수에 비례하여 수행속도가 길어지며, 수행횟수가 적으면 재귀함수문보다 더 빠른 수행속도를 보이기도 했습니다. 왜 이런 차이가 나는지 알려면 조금 더 공부해야겠지만, 결론적으로 수행횟수에 영향받지 않는 재귀호출이 효율성이 좋습니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼