재귀적 reverse() 함수
글쓴이: jsunam / 작성시간: 화, 2005/11/29 - 6:45오후
C언어 공부 중에 reverse() 함수를 "recursive function"을 이용해서
작성하라는 문제에 아래와 같이 해보았습니다.
reverse() 함수 내에 static int 로 정의한 부분과
char t[] = " "; 처럼 정의한 부분,
동적으로 메모리를 할당하는 부분이 맘에 걸리고 ...
에러 없이 잘 동작하기는 한데,
전체적으로 만족스럽지 않습니다.
물론 테스트이기 때문에 에러 처리에 대해서는 고려하지 않았습니다. :oops:
아래 코드의 문제점을 지적해 주시고,
보다 괜찮은 해결책을 알려주시면 감사하겠습니다.
#include <stdio.h>
char *reverse(char *s)
{
static int len = -1;
char t[] = " ";
if (len < 0) {
char *p = s;
while (*p) p++;
len = p - s;
}
if (*t = *s)
return strcat(reverse(++s), t);
return (char *) calloc(len + 1, sizeof(char));
}
main(int argc, char *argv[])
{
char *str;
str = reverse(argv[1]);
printf("%s\n%s\n", argv[1], str);
free(str);
return 0;
}
Forums:


이게 과연 꼭 재귀를 써야하는지 의문입니다만, 이런건 어떤가요?[co
이게 과연 꼭 재귀를 써야하는지 의문입니다만, 이런건 어떤가요?
#include <string.h> #include <stdlib.h> #include <stdio.h> void reverse(char *src, char *dst) { if(*src != '\0') { reverse(src + 1, dst - 1); *dst = *src; } } int main(int argc, char *argv[]) { int length; char *str; length = strlen(argv[1]); str = calloc(length + 1, sizeof(char)); reverse(argv[1], str + length - 1); printf("%s\n%s\n", argv[1], str); free(str); return 0; }답변해 주셔서 감사합니다. 작성하신 코드를 보니, 공부에 도움이 많이
답변해 주셔서 감사합니다.
작성하신 코드를 보니, 공부에 도움이 많이 됩니다.
맞는 말씀이십니다. reverse() 함수를 재귀적으로 작성하기에는
좀 무리가 있어보입니다. 다만, 제가 공부하고 있는책에 재귀적으로 하라는
연습문제가 있어서... :-)
댓글 달기