汉诺塔java程序_Java程序:汉诺塔

为了弄这个递归,简直快被逼疯。。。

package com.cskaoyan.sax;

import java.util.Scanner;

/*汉诺塔:

* A柱子上从上倒下按从小到大的顺序放着n个圆盘,最终要将这些圆盘以同样的顺序移动到C柱子上

*如果只有1个圆盘,可直接从A移动到C上,只需移动1次

*否则,如果有那个圆盘

*先将A上的n-1个盘子借助C柱子移动到B,再将A上剩下的一个圆盘直接移动到C

* 最后将B上的n-1个圆盘借助A移动到C

*

*/

public class Hanoi {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("请输入需要移动的盘子的个数n:");

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

hanoi(n,'A','B','C');

}

//步骤计数器

public static int step = 1;

//最终的结果是将所有的圆盘都移动到C柱

//先把剩下的n-1个圆盘看成一个,需要将他们从A柱借用柱C移动到B柱上,然后再将第n个圆盘直接移动到C柱上

//接下来,是以n-1圆盘所在的B柱开始,执行同上一步相同的操作,即借助C,将n-2个圆盘移动到到A住上

//其实可看作 (A) (B)

// 圆盘数 开始柱 借用柱 终点柱

//方法:移动方法

public static void hanoi(int n,char a,char b,char c){

if(n == 1){

move(n,a,c);

}

else{

hanoi(n-1,a,c,b);//先将n-1个圆盘从A柱借用C柱移动到B

move(n,a,c);

//接下来,执行n-1个圆盘的汉诺塔

hanoi(n-1,b,a,c);//再将n-1个圆盘从B柱借用A柱移动到C柱

}

}

//方法:打印移动顺序

public static void move(int n,char a,char b){

System.out.println("第"+step+"步,盘子"+n+"从"+a+"塔移到"+b+"塔");

step++;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值