inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘

실전 문제 : KART-RIDER (N모 회사)

재귀함수 질문

464

김동주

작성한 질문수 1

0

질문 1.png이 이후에 바로 ret = max(ret, moveDist + Solve(4)); 계산이 이루어져야 하는 거 아닌가요? 디버깅해보니까 다시 Solve(4)가 호출?되고 캐쉬 값을 반환한 이후에 계산이 되는데 어떻게 작동하는 건가요?

왜 이부분실행.png이 사진이 첫번째 사진 Solve(4)가 반환된 후 다음코드로 이동한거에요.

기술면접

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 답변드립니다.

재귀함수가 어떻게 작동하는지 궁금하시군요. 재귀함수는 자기 자신을 호출하는 함수로, 문제를 해결하기 위해 동일한 계산을 반복적으로 수행합니다. 문제를 더 작은 문제로 나누고, 그 작은 문제를 해결하여 최종적으로 원래 문제의 해답을 찾아내는 방식입니다.

첫 번째 이미지에서 Solve(4)가 호출된 후, 이에 대한 계산이 이루어지기 전에 다시 같은 함수가 호출되는 것은 Solve(4) 내부에서 다른 파라미터를 가진 Solve 함수가 호출될 수 있기 때문입니다. 이렇게 재귀 호출이 이루어진 후, 각 재귀 호출이 끝나 반환된 값을 가지고 본래의 Solve(4) 호출 위치로 돌아와 ret = max(ret, moveDist + Solve(4));의 계산을 수행합니다.

즉, Solve 함수는 자기 자신의 계산을 완료하기 위해 동일 함수를 재귀적으로 호출하고, 각각의 호출 결과를 받아 최종 결과를 도출합니다.

두 번째 이미지는 Solve 함수의 다른 부분을 보여주며, 여기서는 재귀함수의 끝나는 조건, 즉 ‘base case’를 확인할 수 있습니다. if (now >= shoes.size())Solve 함수가 어떤 특정 조건에 도달했을 때 더 이상 자신을 호출하지 않고 0을 반환하여 재귀 호출을 종료함을 의미합니다.

또한 메모이제이션이 언급되어 있는 것으로 보아, 한 번 계산된 결과는 캐시에 저장하여 같은 계산을 반복하지 않도록 최적화하고 있는 것을 볼 수 있습니다.

재귀 함수가 각 단계에서 어떻게 실행되고 결과가 어떻게 결합되는지 이해하는 것은 알고리즘 학습에 매우 중요합니다. 복잡해 보일 수 있지만, 각 호출과 반환을 따라가며 단계별로 함수가 어떻게 처리되는지를 확인해 보면 도움이 될 것입니다.

함수의 호출 흐름이나 최적화 방식에 대해 더 궁금하신 점이 있으시면 질문해 주세요.

네트워크 전체 흐름 복습 질문

0

9

1

프로필 사진 세팅과 관련하여 질문 드립니다

1

20

2

시스템 엔지니어 관련 질문입니다.

0

36

2

구글 폼 작성 완료!

1

29

1

개발과 연관없는 경력 기입 여부

1

83

2

이직 준비 방향에 대한 조언을 구하고 싶습니다.

1

72

2

이력서 구성에 대한 질문드립니다.

1

77

2

Replace함수 질문

0

82

2

A*, 다익스트라, Bfs차이 질문

0

171

2

closed list를 비교하는 부분이 궁금합니다.

0

118

1

부모가 2개 이상일경우 질문

0

172

2

sort함수 쓰려면 알고르즘헤더를 추가해야하는거 아닌가요?

0

187

2

빅오 표기법 2단계

0

328

1

list의 insert, erase에서 매개변수는 왜 iterator를 복사형으로 받나요?

0

290

1

Pop()함수에서 레퍼런스를 반환하지 않는 이유가 궁금합니다

0

386

3

iterator의 begin, end, insert, erase함수에서 iterator를 반환할 때 일어나는 현상이 궁금합니다

0

227

1

언리얼 part.4 는 안나오나요?

0

448

1

클레스 템플릿 헤더파일 분리시 주의 사항이 있나요?

0

563

3

Pos operator< 어디서 사용하나요?

0

518

2

Disjoint Set 클래스 수정해도 괜찮나요?

0

468

1

A*알고리즘 작성과정에서 블록 안에서 초기화를 한 이유가 궁금합니다.

0

592

1

1강에서의 List와 자료구조편에서의 List의 차이가 뭘까요?

0

596

1

이진 탐색 트리 삭제 질문

0

700

1

해당 문제 유형을 수학적으로 표현 가능할까요?

0

505

1