汉诺塔非递归算法

这两天讲《Web程序设计》,用JavaScript写了个汉诺塔的非递归算法,觉得有点意思,放在这里吧!

传统的递归算法: 

 
    
  1. <html xmlns="http://www.w3.org/1999/xhtml"> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>Hanoi Tower (Recursive algorithm) - 汉诺塔(递归算法)title> 
  5. <style type="text/css"> 
  6. i {  
  7.     color: #0000ff;  
  8. }  
  9. P {  
  10.     text-align: center;  
  11. }  
  12. style> 
  13. <script type="text/javascript"> 
  14. var step=0;  
  15. function MoveOnePlate(n, loca1, loca2)  
  16. {  
  17.     document.write("第" + ++step + "步:移动第<i>" + n + "i>个盘子,从" + loca1 + "到" + loca2 + "<br />");  
  18. }  
  19.  
  20. function MovePlates(n, s, m, d)  
  21. {  
  22.     if(n==1)  
  23.       MoveOnePlate(n, s, d);  
  24.     else  
  25.     {  
  26.         MovePlates(n-1, s, d, m);  
  27.         MoveOnePlate(n, s, d);  
  28.         MovePlates(n-1, m, s, d);  
  29.     }  
  30. }  
  31. script> 
  32. head> 
  33.  
  34. <body> 
  35. <p>Hanoi Tower (Recursive algorithm) - 汉诺塔(递归算法)<br />Mengliao Software Studio(Baiyu) - 梦辽软件工作室(白宇)<br /> 
  36. Copyright 2011, All right reserved. - 版权所有(C) 2011<br />2011.03.31p> 
  37. <script type="text/javascript"> 
  38.     n=parseInt(prompt("请输入盘子的数量:", 3), 10);  
  39.     if (isNaN(n) || n<1 || n>16)  
  40.     {  
  41.         alert("请输入介于1到16的自然数!");  
  42.         location.reload();  
  43.     }  
  44.     else  
  45.     {  
  46.         document.write("共" + n + "个盘子,需移动" + (Math.pow(2, n)-1) + "步:<br /><br />");  
  47.         MovePlates(n, "<i>源点i>", "<i>临时i>", "<i>目标i>");  
  48.     }  
  49. script> 
  50. body> 
  51. html> 

这个递归算法就不详细说了,核心代码只有5、6行。
下面是非递归算法: 

 
    
  1. <html xmlns="http://www.w3.org/1999/xhtml"> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>Hanoi Tower (Non-recursive algorithm) - 汉诺塔(非递归算法)title> 
  5. <style type="text/css"> 
  6. i {  
  7.     color: #ff0000;  
  8. }  
  9. p {  
  10.     text-align: center;  
  11. }  
  12. style> 

你可能感兴趣的:(汉诺塔非递归算法)