js实现汉诺塔
汉诺塔问题是一个很经典的递归算法问题,今天用js实现一下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>汉诺塔</title> <style> </style> </head> <body> <p>请输入汉诺塔圆盘数量</p> <input type="text" id="ipt"> <input type="button" id="btn" value="start"> <div id="hanoi"></div> <script> var han = document.getElementById('hanoi'); function hanoi(n,x,y,z){ return n==1?(move(x,1,z)):(hanoi(n-1,x,z,y),move(x,n,z),hanoi(n-1,y,x,z)); } document.getElementById("btn").onclick = function(){ var ipt = document.getElementById("ipt").value; hanoi(ipt,"x","y","z"); } function move(x,n,z) { var div = document.createElement("div"); div.innerHTML = "碟子"+n+"从塔"+x+"移动到"+z; han.insertAdjacentElement("beforeend",div); } </script> </body> </html>
汉诺塔算法是一个不断递归的过程,其实一层一层展开之后,你会发现他其实可以展开成一个树形结构,最后是都是在计算move();
这是一个三层汉诺塔的展开式,其实移动顺序就是从上到下的m()函数。
可视化的汉诺塔没有做出来,很难受,从想法到实现都是错误的。吸取经验,我相信我一定可以做出来的!