题目
有三根圆柱,最左边的圆柱上放了n层汉诺塔,即从下到上每一层都比上面大,打印n层汉诺塔,从左边移动到最右边的移动过程,要求每一层在移动过程中,不能放在比它自身小的那一层上,并且每次只能移动一层,最后要求得到原样的汉诺塔
- 假设移动起始圆柱为from,目标圆柱为to,剩余的圆柱为other
- 当只有一层时,直接打印移动即可
- 当有两层时,需要先将第一层移动到other圆柱上,然后将第二层移动到to上,接着将other上的移动到to上
- 当有三层时,要移动第三层,那么需要先移动前两层,而前两层的移动步骤如上,移动完成后,第三层移动到指定圆柱to,然后将前两层other移动到目标圆柱to
- 当有n层时,需要先移动n-1层从from到other,然后将第n层从from到to,接着将n-1层从other移动到to
- 故递归的结构将按照如上逻辑展开
function luo(n) {
function move(i, start, to, other) {
if (i < 1) {
return;
}
move(i - 1, start, other, to);
console.log(start + "=>" + to);
move(i - 1, other, to, start);
}
move(n, "左", "右", "中");
}
luo(3);