• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

재귀함수 질문

24.01.17 21:27 작성 조회수 187

0

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

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

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.19

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

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

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

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

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

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

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

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

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