해결된 질문
작성
·
54
0
(기출) 2024년 2회 기출문제
(영상) 43분대
질문
return 값이 dcba가 되는 것이 이해가 잘 되지 않습니다.
1) 코드 흐름을 보면 처음에 result - comp(str, 7, seen); 실행
2) idx가 0보다 크므로, char c = str.charAt(7)
즉 여기서 char c는 d가 됨
3) 그리고 String result = comp(str, 6, seen)으로 comp 함수를 다시 부르는 거죠? (재귀함수)
4) if (!seen[c])는 seen[d]는 처음에는 False이므로, !를 만나 True
5) result = d + result
6) char c = str.charAt(6)
이제 char c는 c가 됨 // 3번에서 호출한 재귀함수 실행
7) 이런식으로 해서 처음 들어오는 값만 result에 저장되다 보니 dcba가 출력되는게 맞나요?
추가로 재귀함수를 만나면 아래 if문은 재귀함수가 모두 끝난 이후에 진행되는 것인지, 병렬(?)로 진행되는 것인지 궁금합니다.
답변 2
0
안녕하세요,
우선 1~6번까지 흐름은 맞습니다. 계속 재귀함수를 호출하는 것이고요.
7번은 if(!seen[c])를 보시는 것 맞죠? 여기에는 해당 문자의 아스키코드값에 대한 배열이 false인 경우 다시 느낌표(!는 Not의 의미)로 바꿔서 true로 만든 다음에 c + result를 result에 저장하는 것입니다.
그래서 앞에서 나오지 않은 것만 비어있는 문자(" ") 앞으로 붙이면서 최종 리턴하는 것이죠.
이렇게 이해하셨다면 옳게 이해하셨습니다.
재귀함수를 만나면 제가 호출한 재귀함수가 끝나기 전까지는 아래로 내려가지 않습니다.
아예 재귀함수라고 생각하지마시고, 내용은 같은데 다른 이름의 함수를 호출한다고 생각해보시면 편합니다.
함수1에서 함수2 부르고, 함수2에서 함수3을 부르고.... 마지막에서 리턴하고 다시 리턴하고....
이렇게 된다면 함수1에서는 결국 리턴값이 돌아오기 전까지는 아래 코드를 실행하지 못합니다.
재귀함수가 모두 끝난 다음에야 다음 줄로 넘어가셔야합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김예린님!
재귀 함수의 동작 방식과 그로 인한 출력 결과에 대해 궁금하신 점, 이해할 수 있도록 설명드리겠습니다. 우선, 질문하신 내용을 기초로 재현해 보겠습니다.
재귀 호출 이해하기:
comp(str, n, seen)
함수가 호출되면, 먼저 char c = str.charAt(n)
을 실행하여 현재 n
위치의 문자를 가져옵니다.if (!seen[c])
조건을 검사하여 해당 문자가 아직 사용되지 않았다면 True
로 평가되고 아래 로직을 진행합니다.result = c + result
는 재귀 함수에서 앞쪽에 해당 문자를 계속 추가하여 결과를 만듭니다.재귀의 반환과 결과:
dcba
처럼 출력되는 것입니다.재귀의 흐름:
추가적으로, 유사한 질문이 등록된 게시물이 있어 관련 정보를 제공드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.