汉诺塔递归算法

一、程序设计思想:

从左到右 A  B  C 柱 大盘子在下, 小盘子在上, 借助B柱将所有盘子从A柱移动到C柱, 期间只有一个原则: 大盘子只能在小盘子的下面.有3个盘子, 大中小号, 越小的越在上面, 从上面给盘子按顺序编号peg1 、peg2 、peg3,peg1上放置需要移动的盘,peg2用作移动辅助盘,peg3当做移动后的盘。

设置两个函数Hanoi(int n,String peg1,String peg2,String peg3)递归进行操作;move(String c1,String c2)用来输出移动步数。

二、程序流程图:

 

 

三、源程序:

package homework2;

 

import java.util.Scanner;

 

public class Hanoi {

         static int count=0;

 

         public static void main(String[] args) {

                   // TODO Auto-generated method stub

                   int n;

                   System.out.println("输入你想移动的盘子数目:");

                   Scanner in=new Scanner(System.in);

                   n=in.nextInt();

                   System.out.println("移动"+n+"个盘子需要的步数为:");

                   hanoi(n,"peg1","peg2","peg3");

                   System.out.println("总共需要移动"+count+"步");

 

         }

         public static void hanoi(int n,String peg1,String peg2,String peg3){

                   //将peg 1借助peg2,移动到peg3

                   if(n==1) {

                            move(peg1,peg3);

                            count++;

                   }

                   else {

                            hanoi(n-1,peg1,peg3,peg2);

                            move(peg1,peg3);

                            hanoi(n-1,peg2,peg1,peg3);

                            count=count+1;

                   }

         }

         public static void move(String c1,String c2) {

                   System.out.println(c1+"-->"+c2);

         }

 

}

 

四、实现结果截图:

 

 

 

posted @ 2017-10-14 00:58  Someday&Li  阅读(887)  评论(0编辑  收藏  举报