汉诺塔问题
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
图片来自网络,侵删
解决方法
ps: n: A->(B)->C 代表n个盘从A借助B到C
代码实现
- Python
# n为A柱子上的盘数
no = 0 # 统计每一步
def move(n, a, b, c):
count = 0 # 统计总次数
global no # 每一步的编号
if n == 1:
no = no + 1
print(no, ":", a, "-->", c)
return 1
else:
count += move(n - 1, a, c, b)
count += move(1, a, b, c)
count += move(n - 1, b, a, c)
return count
print(move(3, "A", "B", "C"))
- Java
public class Hanoi {
static int count = 0;
public static void main(String[] args) {
// hanoi(3, 'A', 'B', 'C');
hanoi(6, 'A', 'B', 'C');
System.out.println(count);
}
public static void hanoi(int n, char a, char b, char c) {
if (n == 0) {
// return;
} else {
hanoi(n - 1, a, c, b);
System.out.println(a + "->" + b);
count++;
hanoi(n - 1, c, b, a);
}
}
}