#include<stdio.h>
#include<math.h>
void f(int cnt, char x, char y, char z) {
if (cnt > 0) {
f(cnt - 1, x, z, y);
printf("%d번 원판을 %c에서%c로 이동\n", cnt, x, z);
f(cnt - 1, y, x, z);
}
}
int main() {
int n;
scanf("%d", &n);
printf("총 이동 횟수는 %d번 입니다.\n\n",(int)pow(2, n) - 1);
f(n, 'A', 'B', 'C');
return 0;
}
답변자님,
정보를 공유해 주세요.
재귀함수는 흐름보다는 수학적 지식이 필요해요.
점화식에 대해서 수학공부를 하세요.
2020.01.08.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
그림을 상상하시면 이해하기가 쉬워요
그냥 말 그대로 하노이탑의 흐름을 생각하시면 됩니다
만약 원판이 3개가 있다고 치면 위에서 부터 1, 2, 3번 원판이라 하겠습니다.
1. 왼쪽의 1번 원판을 오른쪽으로 옮긴다
2. 왼쪽의 2번 원판을 가운데로 옮긴다.
3. 오른쪽의 1번 원판을 가운데로 옮긴다.
4. 왼쪽의 3번 원판을 오른쪽으로 옮긴다.
5. 가운데 1번 원판을 왼쪽으로 옮긴다.
6. 가운데 2번 원판을 오른쪽으로 옮긴다.
7. 왼쪽 1번 원판을 오른쪽으로 옮긴다.
그냥 이 흐름입니다.
소스 코드마다 주석을 달면서 해보면 이해가 쉬우실겁니다.
소스 코드는 남이 설명한다고 되는 게 아니라 본인이 이해하려고 노력을 해야 이해가 됩니다
혹시 정말 이해가 안 되신다면 댓글로 메일 주소 남겨주세요
제가 주석 단 코드 보내드리겠습니다.
2020.01.17.
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.