먼저 solve 함수의 호출이 무엇을 의미하는지를 파악하는 게 중요합니다.
n: 움직여야 할 원판의 높이
x: 현재 자리
y: 옮겨가야 할 자리
그러면 우선 간단하게 main에서 solve(n, 1, 3);은 n개의 원판을 1번 자리에서 3번 자리로 옮긴다는 뜻을 알 수 있죠.
그 다음, 각 호출 내에서 무엇을 해야 하는지 살펴봅시다.
예를 들어, 처음에 원판 5개를 1에서 3으로 옮겨야 된다고 생각해보세요. 이를 크게 3개의 작업을 쪼개어 보면,
1. 맨 밑판을 제외한 4개를 2에 옮긴다.
2. 맨 밑판을 3에 옮긴다.
3. 2에 쌓인 4개를 3에 옮긴다.
이 3개의 과정이 바로 solve, printf, solve의 의미입니다.
6 - x - y는 가능한 모든 x와 y의 조합에 대해서 다음 호출 식을 구하는 공식인데요, x랑 y를 하나씩 넣어서 계산해보시면 잘 나오는 걸 볼 수 있습니다.
별로 설명한 게 없는 것 같은데, 다 설명됐습니다. 재귀의 마법입니다.
dydsj0920 6년 전 3
재귀 함수가 간단할때는 어떤 순서로 돌아가는지 알겠는데요(스택의 원리)
재귀 함수안에 자기 자신을 호출하는 함수가 이렇게 2개가 들어가버리니까 머리가 터질거 같네요..
디버그를 찍어봐도 어떤식으로 돌아가는지 이해가 잘 안가는데..ㅜ
제가 너무 꼼꼼하게 살펴보는건가요? 그냥 외워서 풀어야 하는걸까요?
재귀함수를 정확히 이해하기 위한 팁이 궁금합니다ㅜㅜ