java递归实现汉诺塔步骤介绍
作者:zzz45611 发布时间:2022-03-03 09:44:17
标签:java,汉诺塔
汉诺塔的规则是:一共三根柱子,一根柱子从上到下套着有小到大的若干个圆盘,要将所有圆盘按照这个排放顺序移动到第三根柱子上,并且每次只能移动一个圆盘.
可以将整个过程分为三个步骤来看:
第一步:将除最大圆盘外的n-1个圆盘移动辅助柱子上
第二步:将最大的圆盘移动到目标柱子
第三步:将n-1个圆盘从辅助柱子移动到目标柱子
其中第一步又可以拆成一模一样的三步,可以看成一个n-1层的塔要移动到目标柱子,只不过目标柱子换了一个:
第三步也可以拆分成一模一样的三步:
多拆几次就会发现规律:第一步和第三步无论如何拆成更小的汉诺塔,都只是目标柱和辅助柱发生调换,其他部分都是一模一样.所以我们将第一步和第三步进行递归运算就可以解决汉诺塔问题.
static void hanNuo(int n,String A,String B,String C){
if (n==1){
System.out.println("把第"+n+"个从"+A+"移动到"+C);
}else {
hanNuo(n-1,A,C,B);
System.out.println("把第"+n+"个从"+A+"移动到"+C);
hanNuo(n-1,B,A,C);
}
}
每进入一次递归塔的层数减一 ,由于第一步和第三步每拆分一次目标塔和辅助塔就会互换,同理,每进入一次递归也会将两个塔互换,因为第一步拆分目标塔是在塔二和塔三之间循环,所以我们在进入递归时也将传入代表"塔二"和"塔三"的参数互换,同理第三步也将互换代表"塔一"和"塔二"的参数.
方法中的第二步由于第一步已经递归完成,所以可以直接使用打印语句进行输出.
来源:https://blog.csdn.net/zzz45611/article/details/122380248


猜你喜欢
- Web Services 可以将应用程序转换为网络应用程序。通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项
- Android 加载大图及多图避免程序出现OOM(OutOfMemory)异常1、高效加载大图片我们在编写Android程序的时候经常要用到
- 在网上看到一些人写关于条形码的代码都很长,有的甚至拿来卖,所以查了下资料,希望能对大家有帮助。我的实现原理是:其实Windows本身就有一个
- 1、背景一般情况下,有些搜索需求是需要根据拼音和中文来搜索的,那么在elasticsearch中是如何来实现基于拼音来搜索的呢?可以通过el
- 本文实例为大家分享了Android studio点击跳转WebView的具体代码,供大家参考,具体内容如下代码文件import androi
- 代理模式:为其他对象提供一种代理以控制某个对象的访问。用在:在某些情况下,一个客户不想或者不能直接访问另一个对象,而代理对象可以在客户端和目
- 之前使用OnSharedPreferenceChangeListener,遇到了点小问题,就是有些时候OnSharedPreferenceC
- 今天做项目的时候,遇到一个问题,如果我调用某个服务的接口,但是这个服务挂了,同时业务要求这个接口的结果是必须的,那我该怎么办呢,答案是通过h
- 在上篇文章给大家介绍了IntelliJ IDEA设置显示内存指示器和设置内存大小的方法,感兴趣的朋友可以点击阅读,今天给大家分享IDEA 设
- 本文实例讲述了Android编程防止进程被第三方软件杀死的方法。分享给大家供大家参考,具体如下:项目测试的时候发现,按home键回到桌面,再
- 本文介绍idea的安装和基本使用首先保证JDK正常安装及配置下载地址:https://www.jetbrains.com/idea/down
- 目录多通道分离API操作通道合并API操作结果源码多通道分离APIpublic static void split(Mat m, List&
- 本文实例为大家分享了java实现双色球机选 * 的具体代码,供大家参考,具体内容如下双色球号码1~32不重复选6个(排序好),1~16中
- JPA @Basic单表查询实现大字段懒加载近期看了JPA@Basic注解的使用,看到该注解可以设置字段的懒加载。1.以前碰到的懒加载:我们
- 之前的一篇文章中的代码中有一个using的用法,刚开始查看了一些资料说是强制关闭对象的一个命令。今天又查了一些资料,才明白,原来using指
- 本文实例讲述了spring AOP定义AfterThrowing增加处理。分享给大家供大家参考,具体如下:一 配置<?xml vers
- 对于clear与new Map的区别。我们首先来看一个例子,本例子是我在实际开发中遇到的,需求就是讲map放入到list中,说白了就是lis
- 算法简介迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学迪家迪杰斯特拉于1959年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶
- 文件夹,文件这是常见的,怎么创建?要不要先判断是否存在?非常非常基础的知识点using System;using System.Collec
- 调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明