NAVER

질문 c언어 재귀함수 하노이탑
wjood 조회수 375 작성일2020.01.07

#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;

선생님이 짜줫는데 흐름을 이해 못하겟어요 알려주세요!!

프로필 사진

답변자님,

정보를 공유해 주세요.

2 개 답변
1번째 답변
프로필 사진
밤엔반짝반짝
초인
수학, 프로그래밍, 환경 분야에서 활동
본인 입력 포함 정보

재귀함수는 흐름보다는 수학적 지식이 필요해요.

점화식에 대해서 수학공부를 하세요.

2020.01.08.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.
2번째 답변
프로필 사진
비공개 답변
초수

그림을 상상하시면 이해하기가 쉬워요

그냥 말 그대로 하노이탑의 흐름을 생각하시면 됩니다

만약 원판이 3개가 있다고 치면 위에서 부터 1, 2, 3번 원판이라 하겠습니다.

1. 왼쪽의 1번 원판을 오른쪽으로 옮긴다

2. 왼쪽의 2번 원판을 가운데로 옮긴다.

3. 오른쪽의 1번 원판을 가운데로 옮긴다.

4. 왼쪽의 3번 원판을 오른쪽으로 옮긴다.

5. 가운데 1번 원판을 왼쪽으로 옮긴다.

6. 가운데 2번 원판을 오른쪽으로 옮긴다.

7. 왼쪽 1번 원판을 오른쪽으로 옮긴다.

그냥 이 흐름입니다.

소스 코드마다 주석을 달면서 해보면 이해가 쉬우실겁니다.

소스 코드는 남이 설명한다고 되는 게 아니라 본인이 이해하려고 노력을 해야 이해가 됩니다

혹시 정말 이해가 안 되신다면 댓글로 메일 주소 남겨주세요

제가 주석 단 코드 보내드리겠습니다.

2020.01.17.

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.