汉诺塔问题解析

汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

——百度文库

 

这个问题可以用递归的方法解决。

假设把n片圆盘由A柱移动到C柱,B柱为中转站,所用方法:

Hanoi(n, 'A', 'B', 'C');

下面就是考虑怎么实现这个方法。

首先,当n = 1时,可以一步到位!

然后,当n > 1时,需要先将上面的n-1个小盘子由A移动到B,再将底下最大的盘子由A移动到C,最后再将B上的n-1个盘子移动到C。

于是:

var Hanoi = function (n, a, b, c) {
    if (n === 1) {
        // 当只有一层时,一部到位,递归终止
        console.log(`${a} >>>> ${c}`)
    } else {
        // 当不止一层时
        // 先把上边的n-1层由A挪到B
        Hanoi(n-1, a, c, b)
        // 再把最大的由A挪到C
        console.log(`${a} >>>> ${c}`)
        // 最后把n-1层由B挪到C
        Hanoi(n-1, b, a, c)
    }
}

 

你可能感兴趣的:(数据结构与算法)