00osos   4년 전

재귀 함수를 사용해야한다는 정보를 통해서 이것저것 시도해보다가 해결이 안되어 질문 드립니다!

저 소스 코드에서 2~8줄에서 else로 빠지면, 다시 hanoi(n-1,a,c,b)를 호출하는데, 여기서 다시 중첩되어서 함수가 열린다는 소리인가요? 그리고 만약에 n에 4를 넣었을 경우 15번을 해야한다 나오면서, 

15 

1 2 

1 3 

2 3 

1 2 

...

 2 3

이런식으로 진행이 되는데, 이 코드를 실행하면서 어디서부터 어떻게 흘러가는지(코드 실행순서(?))를 간략하게 알고싶습니다. 

독학으로 이해하기는 조금 무리인거같네요 ㅜㅜ 알려주시면 감사하겠습니다!


djm03178   4년 전

재귀 함수를 이해할 때는 함수가 호출되는 과정을 하나씩 따라가서는 어렵습니다. 딱 두 가지만 이해하면 됩니다.

1. 어떤 호출의 의미

2. 그 호출과 재귀호출의 관계

이 코드에서 hanoi(n, a, b, c)의 의미는 n개의 블록이 a에 쌓여있는 걸 c로 옮길 것이며 남은 하나의 기둥이 b라는 뜻이고, 하노이 탑 공식에 의해 그 과정은 크게 "n-1개를 a에서 b로 옮기고" "남은 1개를 a에서 c로 옮기고" "n-1개를 b에서 c로 옮기는" 것으로 나눌 수 있고, 이것을 그대로 재귀호출 - 출력 - 재귀호출로 나타낸 것입니다.

00osos   4년 전

뭔가 오랜 시간 고민한거에 비해서 생각보다 간단해서 허탈하기도 하고 신기하기도 하네요 ㅋㅋㅋ

알려주셔서 정말 감사합니다 ㅎㅅㅎ

댓글을 작성하려면 로그인해야 합니다.