#include <stdio.h>
void hanoi_top(int n,char from,char temp,char to);
int main()
{ int top_num;
printf("몇층 하노이 탑인가요?");
scanf("%d",&top_num);
hanoi_top(top_num,'A','B','C');
}
void hanoi_top(int n,char A,char B,char C)
{
if(n==1)
printf("원판을 1을 %c에서 %c로 옮겨요\n",A,C);
else
{
hanoi_top(n-1,A,C,B);
printf("원판 %d를 %c에서 %c로 옮겨요\n",n,A,C);
hanoi_top(n-1,B,A,C);
}
여기서 n을 3으로 잡으면 처음에 A 가 C로 가고요 n을 4로 잡으면 A가 B로 가네요
처음에 else 로 넘어가서 hanoi_top(n-1,A,C,B); 여기서 1 될때까지 계속 해주다가 if 로 가잖아요
거기서 a 에서 c 로 가는건데 hanoi_top(n-1,A,C,B) 여기선 c가 B 니까 n 3 으로 잡았을때도 B가 되야되는거 아닌가요?
그리고 네번째 차례에서는 원판 1 이 c에서 a 로 가는데 c에서 a로는 도대체 어떤 코드 때문에 간건가요?
귀찮 - dc App
이건 님이 하나하나 해보시는게 제일 이해가 빠릅니다 - dc App
이럴때마다 교수님께서 해주신 말씀이 생각나는데
하나하나 손으로 적어가면서 재귀함수 처리방법에따라( 본문에 있는게 재귀함수인건 아실꺼고) 역순처리해가면서 이해해보는게 빠름
하나하나 해봤는데 머리 빡통이라 모르겠음 ㅠㅠ
여기서 n을 3으로 잡으면 처음에 A 가 C로 가고요 n을 4로 잡으면 A가 B로 가네요 이것만 제발 설명해줘 왜 다른거야 도대체
병ㅇ신인가?
병ㅇ신인가?
n을 4로줬을때 (4, A, B, C) -> (3, A, C, B) -> (2, A,B,C) ->(1,A,C,B) 따라서 A가 B로가네요 이빡통대가리련아
n을 3으로 잡으면 (3, A, B, C) -> (2, A, C, B) -> (1, A, B, C) 따라서 A가 C로가네요 이개빡통대갈련아
(4, A, B, C) -> (3, A, C, B) -> (2, A,B,C) ->(1,A,C,B) 에서 왜 (2,A,C,B)로 안변해? 1 될때까지 계속 n-1 하는거잖아
ㄴ 너 빡통임?
(4, A, B, C) -> (3, A, C, B)는 이해가되는데 (3,A,C,B) -> (2,A,B,C)가 이해가 안된다고?
응 왜냐면 3,a,c,b에서 또 1을 빼잖아 그니까 hanoi_top(n-1,A,C,B); 이걸 또 호출해 그러면 a,c,b 이 형태로 계속 가는거 아님? 2,a,c,b 가 되야하는거징
ㄴ 그러면 (4, A, B, C) -> (3, A, C, B) 이거는왜그런데?
니말대로면( 3, A,B,C)임
맞네...ㄷㄷ 형 천재?
너안되겟다 그냥 C언어접고 어셈부터 공부해라
형 마지막 질문 c에서 a로 가는건 코드에 없는데 어떻게 그렇게 되는거임ㅜㅜ
머가 c에서 a로가는데
n=4일때 5번째 원판 1이 c에서 a 로가 ㄷㄷ 함수 매개변수들 보면 그렇게 안되는것같은데
너 손으로 써보긴했냐 빡통대갈아?
(4,A,B,C) -> (3,A,C,B) -> (2,A,B,C) ->(1,A,C,B) (첫줄출력) ->2,A,C (둘째줄출력) -> (1,B,A,C)(셋째줄출력)->3,A,B(넷째줄출력) -> (2,C,A,B) -> (1,C,B,A) (5째줄 출력)
1하고 괄호로 묶인건 자동으로 한줄 출력해줄거고, 괄호로 안묶인 2,A,C나 3,A,B같은건 else에서 중간에 있는 출력문을 요약해놓은거
너 걍 프로그래밍 접어라
몸으로 떼우는 주방알바같은게 딲일듯
ㅜㅜ 형 고마워 미안해서 더는 못 물어보겠고 열심히 해볼게 나 몸도약해ㅜㅜㅜㅠ
하노이맨