汉诺塔 tower of hanoi
目的:把所有圆盘从第一个移动到第三个上
rule 1:一次只能移动一块
rule 2:大片不能放在小片上面
三个柱子分别叫abc
- 把最下面一块(m)以上的打包看成一块(n)处理
- 把n放到b
- 把m放到c
- 把n放到c
- 完成
对于第二步和第四步,我们可以拆解成上述1234
不用关心具体怎么实现的,拆分到一块的时候就出效果了,具体拆分过程就交给递归吧
// abc
// n个 (n-1)打包从a放到b上 n从a放到c上 把(n-1)打包从b放到c
function hanoi (n, a, b, c) {
// 最少是一个才有意义,0个没法移动
if (n > 0) {
hanoi(n-1, a, c, b) // 一整套
console.log('第' + n + '块从' + a + '移到' + c)
hanoi(n-1, b, a, c) // 一整套
}
}
hanoi(4, 'A', 'B', 'C')