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()函数。

可视化的汉诺塔没有做出来,很难受,从想法到实现都是错误的。吸取经验,我相信我一定可以做出来的!

posted @ 2017-06-07 01:03  Charles王志会  阅读(1606)  评论(0)    收藏  举报