递归调用(实现汉诺塔)
2016-03-21 21:49
316 查看
本文出自:http://blog.csdn.net/dt235201314/article/details/50950587
代码实现:
代码实现:
import java.io.IOException; import java.io.InputStreamReader; public class HuoNuoTa { /** * <pre> * 汉诺塔要求:三个柱子A:3个盘子 B:没有 C:没有, * A借助B将盘子移到C,柱子上的盘子由下往上编号依次由大到小,移动过程必须小的在上 * 使用递归思想完成 * 3个盘子的时候:移动7次,1:A--C,2:A--B,3:C--B,4:A--C,5:B--A,6:B--C,7:A--C * </pre> * * @param args */ // 定义一个统计移动次数的变量 static int c = 0; public static void main(String[] args) throws IOException { // 创建基本输入流对象 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入盘子的数量:"); // 输入盘子数量 int n = Integer.valueOf(br.readLine()); // 定义三个柱子编号为A、B、C char A = 'A'; char B = 'B'; char C = 'C'; // 调用方法 hanNuoTa(n, A, B, C); } public static void hanNuoTa(int n, char A, char B, char C) { // 判断是否一个盘子 if (n == 1) { // 一个盘子时直接由A--C System.out.println(++c + "次,编号为" + n + "的盘子由" + A + "移到" + C); } else { // 大于一个盘子时,先把A上的n-1个借助C移到B hanNuoTa(n - 1, A, C, B); System.out.println(++c + "次,编号为" + n + "的盘子由" + A + "移到" + C); // 再把B上的n-1个盘子借助A移到C hanNuoTa(n - 1, B, A, C); } } }
相关文章推荐
- 一、SCALEIO 系统简介
- Linux下5种动态库运行时搜索路径的方法
- jdbc之c3p0笔记
- 在ubuntu下使用emacs对c++程序进行调试
- Viewpager的简单使用
- 一位想学很多的大一同学
- java 学习 1
- 校第十六届大学生程序设计竞赛暨2016省赛集训队选拔赛1007
- LINQ to SQL和Entity Framework对照
- 实验一、命令解释程序的编写实验
- NSOprationQueue 与 GCD 的区别与选用
- 读C#程序最小公倍数答案就是:2123581660200
- Qemu&KVM 创建虚拟机之第一篇(5)QEMU Machine Protocol
- OCP试题
- 如何将参数传递给CGI程序(转)
- java学习笔记9--内部类总结
- 查某年某月有几天
- 使用POI导出excel进阶篇
- 认识和使用NSOperation
- google2016面试题-count of smaller numbers after self