๊ฒ์ผ๋ก ๋ณด๊ธฐ์๋ ํ๋
ธ์ด์ ํ์์ ์ฌ๊ท์ ์กฐ๊ฑด์ธ ๋ถ๋ถ ๋ถํ ์ ๊ฒฝ์ฐ๊ฐ ์์ด๋ณด์ด์ง๋ง, ์์ธํ ๋ค์ฌ๋ค ๋ณด๋ฉด ๋ฐ๋์ ์กด์ฌํ๋ค.
ํ๋
ธ์ด์ ํ์ ๊ธฐ๋ฅ 3๊ฐ๋ ๊ณ ์ ์ด๊ธฐ ๋๋ฌธ์ ์์์ (From), ์ฎ๊ธธ ์ง์ (To), ๋๋จธ์ง ์ง์ (Mid)๋ก ๊ตฌ์ฑ๋๋ค.
์๋ฐ 3๊ฐ ์๋ฅผ ๋ค์ด๋ณด์.(์๋ฐ์ 1์์ 3์ผ๋ก ์ฎ๊ธฐ๋ ๊ณผ์ , N: 3, From: 1, Mid: 2, To: 3)
์ฒซ๋ฒ์งธ ๋นจ๊ฐ ์์ญ์ ์๋ฐ 2๊ฐ๋ฅผ (1)์์ (2)๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด๋ค.(N: 2, From: 1, Mid: 3, To: 2)
์ด ํ, 1->3์ ๊ฐ์ฅ ํฐ ์๋ฐ์ ๋ชฉ์ (To)์ง์ ์ผ๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด๋ค.
๋๋ฒ์งธ ๋นจ๊ฐ ์์ญ์ ์๋ฐ 2๊ฐ๋ฅผ (2)์์ (3)๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด๋ค.(N: 2, From: 2, Mid: 1, To: 3)
์ ๋ฆฌํ๋ฉด,
hanoi(3)์ ๊ฒฐ๊ณผ๋
hanoi(2)๋ฅผ ๋๋จธ์ง ์ง์ ์ผ๋ก ๋จผ์ ์ฎ๊ธฐ๊ณ ,
๊ฐ์ฅ ํฐ ์๋ฐ์ ๋ชฉ์ ์ง์ ์ผ๋ก ์ฎ๊ธฐ๊ณ ,
hanoi(2)๋ฅผ ๋ชฉ์ ์ง์ ์ผ๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์ด ๋๋ค.
์ด๋ฅผ ์ผ๋ฐํ ํ๋ฉด
hanoi(n)(1,2,3) = hanoi(n-1)(1,3,2) + move(1,3) + hanoi(n-1)(2,1,3) ์ด ๋๋ฉฐ
๋ ์ผ๋ฐํ ์์ผ๋ณด๊ฒ ๋ค.
hanoi(n)(From,Mid,To) = hanoi(n-1)(From,To,Mid) + move(From,To) + hanoi(n-1)(Mid,From,To)๊ฐ ๋๋ค.
์ฝ๋๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
}
void hanoi(int n, int From, int Mid, int To)
{
if (n == 1)
printf("1 : %d -> %d\n", From, To);
else
{
hanoi(n - 1, From, To, Mid);
printf("%d : %d -> %d\n", n, From, To);
hanoi(n - 1, Mid, From, To);
}
}
}
๋๊ธ