汉诺塔递归算法

一、程序设计思想:

从左到右 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);

         }

 

}

 

四、实现结果截图:

 

 

 

转载于:https://www.cnblogs.com/somedayLi/p/7664422.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值