数据结构--汉诺塔递归Java实现
/*汉诺塔递归
* 1.将编号0-N-1个圆盘,从A塔座移动到B上面
* 2.将编号N的1个圆盘,从A移动到C上面
* 3.最后将B上面的N-1个圆盘移动到C上面
* 注意:盘子的编号从上到下1-N
* */
public class HannoTower_Recursion { public static void main(String[] args) {
int nDisk = 3;
doTowers(nDisk,'A','B','C'); } private static void doTowers(int topN, char from, char inter, char to) {
if(topN == 1){
//只有一个盘子编号为1,直接从A移动到C上面
System.out.println("Disk 1 " + "from " + from + " to " + to);
}
else{
//将前N-1个盘子从A移动到B---from-->inter
doTowers(topN-1, from, to, inter);
//将第N个盘子从A移动到C---from-->to
System.out.println("Disk " + topN + "from " + from + " to " + to);
//将前N-1个盘子从B移动到C---inter-->to
doTowers(topN-1, inter, from,to );
}
} }
执行过程和结果
Enter(3 disks,A B C)
Enter(2 disks,A,C,B)
Enter(1disk,A B C)
Base case-->disk1 from A---C //Disk 1 from A to C
Return(1disk A B C)
move disk 2 from A--B //Disk 2from A to B
Enter(1disk, C,A,B)
Base case-->disk1 from C---B //Disk 1 from C to B
Return(1disk C A B)
Return(2disk A C B)
move disk 3 from A--C //Disk 3from A to C
Enter(2disk B A C)
Enter(1disk B C A)
Base case-->disk1 from B---A //Disk 1 from B to A
Return(1disk B C A)
move disk 2 from B--C //Disk 2from B to C
Enter(1disk A B C)
Base case-->disk1 from A---C //Disk 1 from A to C
Return(1disk A B C)
Return(2disk B A C)
Return(3 disks,A B C)
数据结构--汉诺塔递归Java实现的更多相关文章
- 数据结构--汉诺塔--借助栈实现非递归---Java
/*汉诺塔非递归实现--利用栈 * 1.创建一个栈,栈中每个元素包含的信息:盘子编号,3个塔座的变量 * 2.先进栈,在利用循环判断是否栈空, * 3.非空情况下,出栈,检查是否只有一个盘子--直接移 ...
- 化繁为简 经典的汉诺塔递归问题 in Java
问题描述 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑 ...
- UVA 10795 A Different Task(汉诺塔 递归))
A Different Task The (Three peg) Tower of Hanoi problem is a popular one in computer science. Briefl ...
- C++汉诺塔递归实现
程序背景: 汉诺塔(Tower of Hanoi)又称河内塔,问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命 ...
- Python之汉诺塔递归运算
汉诺塔问题是一个经典的问题.汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆 ...
- 汉诺塔问题java实现
问题描述 三个柱子,起初有若干个按大小关系顺序安放的盘子,需要全部移动到另外一个柱子上.移动规则:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘. 解题思路 使用递归算法进行处理,实在理不 ...
- c语言-汉诺塔递归调用
#include<stdio.h> int main() { void hano_tower(int n,char one,char two,char three); int m=0; p ...
- C语言数据结构----递归的应用(斐波拉契数列、汉诺塔、strlen的递归算法)
本节主要说了递归的设计和算法实现,以及递归的基本例程斐波拉契数列.strlen的递归解法.汉诺塔和全排列递归算法. 一.递归的设计和实现 1.递归从实质上是一种数学的解决问题的思维,是一种分而治之的思 ...
- 杭电oj1995——汉诺塔V(java实现)
正文之前,先说下做这题的心路历程(简直心累) 这是今天下午的第一道题 第一次看到题目标题——汉诺塔 内心OS:wc,汉诺塔诶,听名字就很难诶,没做过诶,肯定很难实现吧,不行,我得去看看讲解 然后就上b ...
随机推荐
- Elevator poj3539
Elevator Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 1072 Accepted: 287 Case Time ...
- JavaScript高级(01)
前端开发工具 1.1. WebStorm介绍和下载 l 介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码.代码格式化.htm ...
- zoj1871steps 数学 水
zoj1871 题目大意 ...
- 如何在Windows系统中配置Mysql群集(Mysql Cluster)
MySQL群集技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障. Mysql群集(Cluster)简介 M ...
- Akka 的Actor
从第一篇Akka笔记的介绍中,我们是从很高的高度去观察Akka工具箱中的Actors.在这篇笔记的第二篇,我们会看一下Actors中的消息部分.而且延续上一次的例子,我们还会使用同样的学生与老师的例子 ...
- 为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手
为了迎接十九大的到来,帝都城这几天也是满城风雨,听说早高峰期地铁站的人都排到天桥上了,哎,这就是该死的北漂生活.但是无论怎样,我依然在北京向各位问好! 之前总结过俩篇关于阿里Java开发手册的编程规约 ...
- JavaScript大厦之地基:js数据类型
一.数据和类型 俗话说物以类聚,人以群分:这里将人和物都按类别进行了区分.我们数据也一样,使用计算机我们能处理数值,也可以处理文本还可以处理图形.音频.视频等各种各样的数据,不同的数据有 ...
- 【特效】体验很好的导航hover效果移出恢复当前位置
很常见的一种导航的hover效果,鼠标放上后除了正常的hover,在移出整个导航后,会恢复当前栏目的特殊样式,分别有横向和纵向的导航.代码也比较简单,设置一个当前栏目的class,用index()找到 ...
- 【转载】CSS direction属性简介与实际应用
文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/wordpress/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=5 ...
- 如何开发webpack plugin
继上回介绍了如何开发webpack loader 之后.趁热打铁,来继续看下webpack另一个核心组成:plugin. 下面也和loader一样,让我们一起从基本的官方文档着手看起. loader和 ...