【Fiay】【Java】汉诺塔算法 递归实现

Java代码 复制代码 收藏代码
  1. /**
  2. * 汉诺塔问题
  3. *
  4. * 精确计算出到底需要移动多少次才能够将汉诺塔从柱子A搬到柱子B(柱子C作缓冲)
  5. * 输入:汉诺塔的层次数
  6. * 输出:移动次数和移动动作
  7. * 思路:递归
  8. * 使用:直接在main函数new Test(汉诺塔的层次数)
  9. *
  10. * @author Fiay
  11. *
  12. */
  13. public class Test {
  14. private static String a = "柱子A";
  15. private static String b = "柱子B";
  16. private static String c = "柱子C";
  17. private int level;
  18. private int turns;
  19. /*省略Getter and Setter*/
  20. public Test(){}
  21. public Test(int level){
  22. this.level = level;
  23. this.turns = getTurnsByLevel(this.level);
  24. System.out.println("完成!\n共需要"+turns+"步");
  25. }
  26. public int getTurnsByLevel(int level){
  27. System.out.println("汉诺塔层次数为:"+level+"\n开始!");
  28. showSolution(level,a,b,c);
  29. return turns-1;
  30. }
  31. public void showSolution(int level,String a,String b,String c){
  32. if(level>0){
  33. showSolution(level-1,a,c,b);
  34. System.out.println(turns+" - 从("+a+")移到("+b+")\t");
  35. showSolution(level-1,c,b,a);
  36. }else{
  37. turns++;
  38. }
  39. }
  40. public static void main(String args[]){
  41. new Test(2);
  42. //new Test(3);
  43. //new Test(4);
  44. }
  45. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值