关于汉诺塔的最简单理解
最简单的汉诺塔算法解析,看不懂可以刀我
今天给大家带来一个汉诺塔算法的讲解,应该是最简单的理解方法,
首先我们得知道汉诺塔游戏规则,不会有人搜这个然后不知道规则吧?不会吧?不会吧?
好了 解析开始
如果n=1那我们直接输出从a移动到c就好了,所以我们直接写出if n==1的时候 积木从a移动到c
接下来,我们要有一个思想,就是想着,我这个函数,就是整体搬运用的,什么是整体搬运,就是我要把n层塔从a移动到c,那我们就调用run(a,b,c,n),我们要把n层塔从b运到c,那我们就调用run(b,a,c,n),现在脑海里默念10次这个规则
然后 我们的终极目标,是把n层的他/她从a移动到c,所以我们调用这个函数 run(a ,b ,c ,n)
第一步,当塔有n层的时候,我们目前有 a b c三个柱子 ,我要把a的塔移动到c,我们需要先把最底层上面的那一摞(n-1层)积木搬运到a挪到b,那么这个时候我们就调用run(a,c,b,n-1)目的就是把n-1层挪到b,让a最大的积木能移动
第二步,那我们是不是要把a剩下的移动到c,因为剩下了最大块的积木,所以我们直接输出 积木从a移动到c
第三步,c已经有一个最大的积木了,我们剩下的只需要把b上n-1层的积木,整体搬到c,还记得我们的规则吗把n-1整体从b移动到c,直接写下run (b,a,c,n-1)
然后算法就写好了
function run (a, b, c, n) {
if (n == 1) {
console.log(`从${a}移动到${c}`);
} else {
run(a,c,b,n-1)//我要先把a整体移动到b
console.log(`从${a}移动到${c}`);//然后把最底层移动到c
run(b,a,c,n-1)//把b整体移动到c
}
}
run('a', 'b', 'c', 3)