汉诺塔问题原题:
有 A、B、C 三根金刚石柱子,B、C 柱子初始为空,在柱子 A 上按大小顺序放着 n 片黄金圆盘。每一块圆盘都比上面那块更大,最下层的圆盘最大而最上层的最小。
现在需要把圆盘按大小顺序重新摆放在另一根柱子 C 上,每次移动只能把某柱子最上层的一个圆盘移动到另一个柱子的圆盘最上层,并且在任何时候所有柱子上的圆盘都满足上小下大的关系。
问需要多少次移动才能把 n 个圆盘都移动到柱子 C 上。
答案:
需要移动 2^(n-1) 次。这是一个递归的过程,需要分三步走:
1. 把上面 n-1 个圆盘从 A 柱移动到 B 柱。
2. 把最大的圆盘从 A 柱移动到 C 柱。
3. 把 B 柱的 n-1 个圆盘从 B 柱移动到 C 柱。
其中1、3两步是少一个圆盘的汉诺塔问题,可以递归求解。
现在的问题是,当移动了 x 步之后 (0 ≤ x ≤ 2^(n-1)), n 个圆盘分别位于哪一个柱子上?
n=3:
1 2 3
0 A A A
1 C A A
2 C B A
3 B B A
4 B B C
5 A B C
6 A C C
7 C C C
n=4:
1 2 3 4
00 A A A A
01 B A A A
02 B C A A
03 C C A A
04 C C B A
05 A C B A
06 A B B A
07 B B B A
08 B B B C
09 C B B C
10 C A B C
11 A A B C
12 A A C C
13 B A C C
14 B C C C
15 C C C C
n=5:
1 2 3 4 5
00 A A A A A
01 C A A A A
02 C B A A A
03 B B A A A
04 B B C A A
05 A B C A A
06 A C C A A
07 C C C A A
08 C C C B A
09 B C C B A
10 B A C B A
11 A A C B A
12 A A B B A
13 C A B B A
14 C B B B A
15 B B B B A
16 B B B B C
17 A B B B C
18 A C B B C
19 C C B B C
20 C C A B C
21 B C A B C
22 B A A B C
23 A A A B C
24 A A A C C
25 C A A C C
26 C B A C C
27 B B A C C
28 B B C C C
29 A B C C C
30 A C C C C
31 C C C C C