汉诺塔问题:

有三根柱子,源杆A,暂存杆temp,目的杆C A上有n层盘子,由小到大向下排列,现需要将A杆的盘子移到C杆中

要求:1)大的盘在下面,小的盘在上面

2)一次只能移动一个盘子

个人思路:先分析问题,用数学的归纳法

当只有一个盘时,直接移动;

当有两个盘时,先将小的移到暂存杆,再将大的移到目的杆C,最后将暂存杆temp的小盘移到目的杆C中;

当有三个盘时,在下面的代码中的注释中写有详细步骤

......

n个盘时,把它看做两部分一是上面的(n-1)盘,二是第n个盘,先将(n-1)首先将上面的(n-1)个盘子从A杆借助C杆移至temp杆,其次剩下第n个盘,直接放至C杆,最后一次递归调用解决即可。

其中汉诺塔层数可以由程序内存储读取或者键盘输入,c为程序计数器,计算移动盘的次数

import java.util.Scanner;

public class Hanoi {

int c=0;//计数器,计算移动的次数

public void moveone(int n, String A, String C) {

System.out.println("move " + n + " from " + A + " to " + C);

}

public void movesome(int n, String A, String temp, String C) {

c++;

if (n <= 0) {

System.out.println("number error");

return;

} else if (n == 1) {

moveone(n, A, C);

} else {

movesome(n - 1, A, C, temp);

// 首先将上面的(n-1)个盘子从A杆借助C杆移至temp杆

moveone(n, A, C);

// 然后将编号为n的盘子从A杆移至C杆

movesome(n - 1, temp, A, C);

// 将剩下的(n-1)个盘子从temp杆借助A杆移至C杆

}

//草稿纸上手写汉诺塔三层的实现

// moveone(1,A,C);

// moveone(2,A,temp);

// moveone(1,C,temp);

// moveone(3, A, C);

// moveone(1, temp, A);

// moveone(2, temp, C);

// moveone(1, A, C);

}

public static void main(String[] args) {

//层数

System.out.println("请输入汉诺塔层数:");

Scanner input =new Scanner(System.in);

int in=input.nextInt();

int l = 3;

Hanoi h = new Hanoi();

// h.moveone(l,A,C);//程序内存储读取

h.movesome(in, "初始位置", "临时存放地", "目的地址");

System.out.println("汉诺塔的实现需要的移动次数:"+h.c);

// h.movesome(l, "初始位置", "临时存放地", "目的地址");

}

}

程序运行结果:

用java编写汉诺塔问题_数据结构与算法之汉诺塔问题(Java递归)相关推荐

  1. java 单链表是否有环_数据结构与算法随笔之链表-链表是否有环(二)

    上一篇文章我们分析了下链表之反转单向链表,这篇文章我们来分析下另外一个关于链表的经典题目. 判断链表是否有环(在leetcode上的题目地址:环形链表) 题目描述 给定一个链表,判断链表中是否有环 解 ...

  2. 嵌入式团队培训_数据结构和算法概述

    嵌入式团队培训_数据结构与算法概述 要求:理解并记忆即可,会求解算法的时间复杂度 一:数据结构 1.逻辑结构: 2.物理结构 3.抽象数据类型 二:算法 1.算法的五个基本特征: 2.算法设计的要求 ...

  3. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  4. Java 编写程序打印以下图形_怎么用java编写如下程序在屏幕上输出如下图形 * *** *** * 循环语句做(if语句)...

    怎么用java编写如下程序在屏幕上输出如下图形 * *** ***** ******* ***** ... 4个答案  提问时间: 2011-12-16  22个赞 回答:这个图形对吧? * *** ...

  5. java set第n位_数据结构与算法——常用数据结构及其Java实现

    本文采用Java语言来进行描述,帮大家好好梳理一下数据结构与算法,在工作和面试中用的上.亦即总结常见的的数据结构,以及在Java中相应的实现方法,务求理论与实践一步总结到位. 常用数据结构 数组 数组 ...

  6. java array 元素的位置_数据结构与算法:动态图解十大经典排序算法(含JAVA代码实现)...

    点击上方"JAVA",星标公众号 重磅干货,第一时间送达 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: 冒泡排序 选择排序 插入排序 希尔排序 归并排 ...

  7. java环形链表_数据结构和算法(四)Java实现环形链表

    1. 数据结构和算法(四)Java实现环形链表 1.1 约瑟夫问题 约瑟夫问题:公元66年,约瑟夫不情愿地参与领导了犹太同胞反抗罗马统治的起义,后来起义失败,他和一些宁死不降的起义者被困于一个山洞之中 ...

  8. 数据结构和算法 java实现_数据结构与算法——常用数据结构及其Java实现

    前言 仿佛一下子,2017年就快过去一半了,研一马上就要成为过去式了,我打算抓住研一的尾巴,好好梳理一下数据结构与算法,毕竟这些基础知识是很重要的嘛.所以准备在这里搞一个系列的文章,以期透彻. 本系列 ...

  9. prim算法_数据结构与算法

    根据MOOC上课程总结,文章目录为: 一.引论 数据结构的基本概念 数据的逻辑结构和存储结构 算法及其时间复杂度 时间复杂度及应用 二.线性表 线性表的概念及顺序存储 单链表的概念及其基本操作 建立单 ...

最新文章

  1. 20155317 2016-2017-2 《Java程序设计》第十学习总结
  2. 《训练指南》——6.10
  3. DirectSound 混音的实现
  4. jq之$(“p.test“)
  5. 最新25个高质量PSD素材免费下载
  6. selenium python 启动Chrome
  7. 使用weui滚动加载结合php实现分类页数据列表
  8. Objective-C Runtime那点事儿
  9. C语言小游戏---扫雷
  10. 百度统计和谷歌统计文档
  11. java将图片转化为base64码
  12. 快手发布二季度及中期业绩:Q2收入191亿元 同比劲增48.8%
  13. 单位公司年会团拜会抽奖软件程序
  14. PyCon 2011 - Hidden Treasures of the Python Standard Library - 获得夏时令标识符
  15. 2D转换 动画 3D转换
  16. <video>标签及属性说明
  17. c++ Primer课后练习9-31
  18. 图形图像处理案例2——勾线画生成器,绕线画生成器
  19. bit 和 byte 、kbyte
  20. AS查看程序MD5签名、SHA1

热门文章

  1. 一些很酷的.Net技
  2. SQLServer “无法对数据库‘XXX‘ 执行删除,因为它正用于复制”的解决方法
  3. git pull 默认拉取远端其他分支 问题解决
  4. java异常及日志注意事项
  5. Java如何打印异常的堆栈?
  6. 支付宝 APP支付(证书)方式遇到的问题和解决办法
  7. Docker系列5--一些问题及解决
  8. Java线程池了解一下
  9. 手把手教你实现一个 Vue 进度条组件!
  10. AJAX (异步 javascript 和 xml)