问题描述:
如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数
算法分析:
- 将前
n - 1
个圆盘借助c柱子搬到b柱子上 - 将第n个圆盘移动到c柱子上
- 将b柱子上的前
n - 1
个圆盘借助a柱子搬到c柱子上
function hanoi(n, A, B, C){
if(n <= 1){
move(A,C);
return;
}
hanoi(n - 1, A, C, B);
move(A,C);
hanoi(n - 1, B, A, C);
}
function move(A, C){
console.log(A + "move to" + C);
}
规律总结:
移动次数为: 2^n - 1