java汉塔_经典算法问题:汉塔问题

汉塔问题

问题描述

有A,B,C 根柱子,在A上从上往下按照从小到大的顺序放着64个圆盘,以B为中介,把盘子全部移动到C上。

要求移动过程中,不能把大盘放在小盘上面。

实现思想

递归:

为了实现第N个(最下面那个)盘从A到C的移动

1.首先要实现其上的N-1个盘移动到B

2.然后把第N个盘移动到C

3.再实现这N-1个盘从B移动回A。

4.此时问题退化为N-1个碟子从A移动到B的问题,以此类推。

所以首先构造一个用于递归调用的移盘方法:moveDish().

源代码(java)

import java.util.Scanner;

//汉塔问题求解

public class Hanta {

//用于测试的main()方法

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int level = sc.nextInt(); //获取测试层数

moveDish(level, 'A', 'B', 'C'); //调用方法

}

//用于递归调用的移动方法

public static void moveDish(int level , char from , char medium , char to) {

if(level == 1) { //退出递归条件

System.out.println("从"+from+"移动"+level+"号盘子到"+to);

}else { //递归调用

moveDish(level-1 , from , to , medium);

System.out.println("从"+from+"移动"+level+"号盘子到"+to);

moveDish(level-1 , medium , to , from);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值