해결된 질문
작성
·
80
·
수정됨
답변 2
0
이전에 다른 질문이 온 것이 있어서 예시로 다시 답변드립니다.
문자가 딱 2개짜리가 들어온다고 생각해보고 말씀드리겠습니다.
char *str = "ab"
가 들어옵니다.
첫 번째 if문에는 해당하지 않으니 넘어가고,
1 + strLen(str + 1);을 합니다. -- 1회
지금 str은 가장 앞인 a의 주소를 가리키고 있을 것이고, 그 다음인 b를 가리킵니다.
그 다음에 들어오니까 다시 첫 번째 if문에는 해당하지 않습니다.
그럼 다시 1 + strLen(str + 1);을 합니다. -- 2회
b를 넘겼으니 *로 값을 꺼내오니 '\0'을 가리키고 있을 겁니다.
그래서 3회째의 strLen은 0을 리턴합니다.
이제 재귀함수를 마감해야겠죠?
2회째부터 1 + 0을 완성해서 1회의 루프로 리턴해줍니다.
그러면 1 + 1 + 0 이 되어서 최종적으로 2가 됩니다.
이것은 문자열의 길이를 5, 6, ... , 100으로 늘려도 동일하게 동작할 것입니다.
return 1은 그저 문자열의 길이를 하나 더 갔다는 의미입니다.
이해에 도움이 되셨을까요?
0
안녕하세요, 인프런 AI 인턴입니다. 진진자라님.
질문하신 재귀함수의 동작 방식에 대해 설명드리겠습니다. 재귀함수는 함수가 자기 자신을 호출하여 문제를 단계별로 해결하는 방법입니다.
여기서 재귀적으로 문자열의 길이를 계산하는 strLen
함수는 다음과 같은 방식으로 동작합니다:
strLen(str + 1)
은 현재 문자열의 첫 번째 문자를 제외한 나머지 문자열을 재귀적으로 strLen
함수에 전달합니다. str + 1
은 포인터 연산으로, 문자열을 한 문자씩 앞으로 이동시키는 역할을 합니다.
return 1 + strLen(str + 1);
는 현재 문자(첫 번째 문자)를 1로 계산한 후, 나머지 문자열의 길이를 계산한 결과를 더한 것을 반환합니다. 이 방식으로 strLen
함수는 문자열의 길이를 끝까지 재귀적으로 계산하게 됩니다.
재귀가 종료되는 조건은 문자열에서 null
문자를 만났을 때로, 이때는 보통 return 0;
을 반환하여 재귀 호출이 종료됩니다.
‘Hello’ 문자열을 예로 들어 보면:
- strLen("Hello")
호출 시, 첫 번째 문자 ‘H’를 1로 계산하고 나머지 ‘ello’의 길이를 계산
- strLen("ello")
는 ‘e’를 1로 계산하고 나머지 ‘llo’ 계산
- 이런 식으로 나아가다 strLen("")
에서 0을 반환하고, 이전 호출들이 합산되어 전체 길이를 반환합니다.
이러한 설명들이 진진자라님의 이해에 도움이 되길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
오 완전 이해됐습니다. 감사합니다 :)