ใ ์ฌ๊ท ํธ์ถ ใ
[ ํ๋ ธ์ดํ ๋ฌธ์ ]
- ๋ง๋ A์ ์๋ ์ํ๋ค์ ๋ง๋ C๋ก ์ฎ๊ธด๋ค.
- ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ง ์ด๋์ด ๊ฐ๋ฅํ๋ค.
- ๋งจ ์์ ์ํ๋ง์ด ์ด๋์ด ๊ฐ๋ฅํ๋ค.
- ํฌ๊ธฐ๊ฐ ์์ ์ํ์ ์์ ํฌ๊ธฐ๊ฐ ํฐ ์ํ์ด ์ฎ๊ฒจ์ง ์ ์๋ค.
// C code
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void hanoi_tower(int n, char from, char mid, char to) {
if (n == 1) {
printf("์๋ฐ %d(์)๋ฅผ %c์์ %c๋ก ์ด๋\n", n, from, to);
return;
}
else {
hanoi_tower(n - 1, from, to, mid);
printf("์๋ฐ %d(์)๋ฅผ %c์์ %c๋ก ์ด๋\n", n, from, to);
hanoi_tower(n - 1, mid, from, to);
}
}
int main(void) {
hanoi_tower(3, 'A', 'B', 'C');
return 0;
}
hanoi_tower() | |
hanoi(3, 'A', 'B', 'C') hanoi(2, 'A', 'C', 'B') hanoi(1, 'A', 'B', 'C') |
์๋ฐ 1์ A → C๋ก ์ด๋ |
hanoi(2, 'A', 'C', 'B') hanoi(1, 'C', 'A', 'B') |
์๋ฐ 2๋ฅผ A → B๋ก ์ด๋ ์๋ฐ 1์ C → B๋ก ์ด๋ |
hanoi(3, 'A', 'B', 'C') hanoi(2, 'B', 'A', 'C') hanoi(1, 'B', 'C', 'A') |
์๋ฐ 3์ A → C๋ก ์ด๋ ์๋ฐ 1์ B → A๋ก ์ด๋ |
hanoi(2, 'B', 'A', 'C') hanoi(1, 'A', 'B', 'C') |
์๋ฐ 2๋ฅผ B → C๋ก ์ด๋ ์๋ฐ 1์ A → C๋ก ์ด๋ |