1. 개요
- 하노이탑을 이해하면 보통 재귀함수를 완벽하게 이해할 수 있다고 한다.
- 근데 솔직히 난 아직도 재귀가 낯설다. (더 파고들어가야할 듯)
- 부분집합 출력하는 문제에도 재귀가 나오는데 부분집합 출력을 공부하면서 재귀가 잘 이해가지 않아서 하노이탑을 다시 살펴본다.
2. 문제
- N사에서 물어본 문제로 기억함
- HanoiTowerSol(5, 'A', 'B', 'C')인 경우 몇번 이동한 것일까?? 아래 해설 참고
3. 코드
4. 해설
HanoiTowerSol(1, 'A', 'B', 'C') 일 때 1번 이동이 있었음.(1번의 출력을 의미)
HanoiTowerSol(2, 'A', 'B', 'C') 는 HanoiTowerSol(1, 'A', 'B', 'C')을 2번 호출한다는 것을 알 수 있음.
즉, 2 + 1번의 출력이 발생!! 여기서 2는 HanoiTowerSol(1, 'A', 'B', 'C')를 2번 호출했을 때 출력발생!! 그리고 1은 아래 코드 상 14번 째 줄을 의미
HanoiTowerSol(3, 'A', 'B', 'C')는 HanoiTowerSol(2, 'A', 'B', 'C')을 2번 호출한다는 것을 알 수 있음.
즉, 6 + 1번의 출력이 발생!! 여기서 6은 HanoiTowerSol(2, 'A', 'B', 'C')를 2번 호출했을 때 출력발생!! 그리고 1은 아래 코드 상 14번 째 줄을 의미
이런 식으로 계산하면 규칙발견 가능!!
출력은 곧 이동을 의미하므로!! (2^n) - 1번 이동이 발생한다.
그래서 답은 31
'Study with book > 윤성우 열혈 자료구조' 카테고리의 다른 글
후위표기법 BinaryTree로 나타내기 (0) | 2017.06.02 |
---|---|
중위표기법을 후위표기법으로 변경(Stack 사용) (0) | 2017.06.02 |
트리 구현하기 (0) | 2017.06.02 |
트리2 (0) | 2016.12.20 |
트리1 (0) | 2016.12.15 |