说到汉诺塔游戏,是我最近才听说的一个游戏!(原谅我的无知...)
游戏规则是这样的:
有 x , y ,z 三根针,要求把 x 上的 3 个盒子放到 z 上
1. 小盒子只能放在大盒子上边
2. 一次只能搬运一个盒子
那么我们很容易可以得出步骤应该是这样的
x ==> z
x ==> y
z ==> y
x ==> z
y ==> x
y ==> z
x ==> z
ok,我前边说过递归一定含有微弱的耦合性,那么想要写递归一定要先找它们的共同点
废话不多说,直接贴代码吧!
function hanoi_ (n, x, y, z) {
if (n === 1) {
console.log(x + ' ==> ' + z)
} else {
hanoi_(n - 1, x, z, y)
console.log(x + ' ==> ' + z)
hanoi_(n - 1, y, x, z)
}
}
hanoi_(3, 'X', 'Y', 'Z')
好,相信很多人目前都看不懂这个原理吧!更别说写出来了。
那么我们就先讲一下这个函数的原理,再说说写这个函数的人当初到底是什么样的思路呢?难道真的是天才?
爱迪生说过,天才就是 99% 的汗水加上 1% 的灵感。(下一句自己查百度)
那么其实这 99% 的汗水一定是为那 1% 的灵感而流的。
这个函数其实很简单。单从函数角度讲是这样的
如果只有一个盒子那我只需要把当前盒子放到 z 上。
如果有 n 个盒子,那我就需要把 n-1 个盒子先放到 y 上,
然后才能把最后一个盒子也就是 n 放到 z 上,
最后把 n-1 个盒子 又从 y 移动到 z 上。
ok,本人暂时有事,先写到这里了,有时间再继续写。... 抱歉(聪明的人都喜欢自己分析)