java菜鸟---------用java写的汉诺塔问题程序
来源:互联网 发布:淘宝购物津贴有什么用 编辑:程序博客网 时间:2024/05/22 15:08
汉诺塔是递归里最经典的题。
汉诺塔问题:大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
这个问题可以理解为:三个柱子分别是A,B,C.将A上的盘子最终全部移到到C.
如果只有一个盘子,直接将只需要一步1.A->C(A最上边的盘子移到到C的意思后边不在写字),如果是两个1.A->B 2.A->C 3.B->C.如果是3个1.A->C,2.A->B 3.C->B 4.A->C.5.B->A 6.B->C 7.A->C以此类推。。。
这时就出现了一个特点:两个盘子的时候移法1.A->B 2.A->C 3.B->C.三个盘子的时候移法1.(1.A->C,2.A->B 3.C->B)2.(.A->C.)3.(5.B->A 6.B->C 7.A->C)可以把三个盘子时也看成三步,123为一步,4一步,567一步。第一步是干嘛呢?就是将(3-1)个盘子A移动到B,第二步将A中最后一个也是最大一个盘子移到到C,最后一步将B上(3-1)盘子移到C。4个盘子5个盘子。。。。等所有你们可以把这些移到看出3个大步骤,你们可以将4个盘子的步骤全部列出来也可以这样分为3个大步。
所以1.A当一个盘子时盘子从A->C
2.当两个盘子和两个盘子以上时都可以分为三步,设盘子为n第一步:将(n-1)个盘子A移到B 第二步将A的最后一个盘子移到C 第三步:将B上所有盘子移到C。
为此可以列出一个方程:
1. A->C n=1;
F(n)=2 f(n-1) A->B
A->C
f(n-1) B->C n>=2
分段函数大括号不知道如何打不要介意。
代码如下:
public class learn3 {public static void main(String[] args) {learn3 learn3=new learn3();//数字为几个盘子,ABC为3个柱子learn3.go(2,'A','B','C');}public void go(int n,char A,char B,char C){//当n=1时移法if(n==1){System.out.println(A+"->"+C);return ;}//n>=2的移法go(n-1, A, C,B);//先把A柱子上n-1个盘子通过C移动到BSystem.out.println(A+"->"+C);//将A柱子上最后一个盘子移到到Cgo(n-1, B, A, C);//最后把B柱子上所有的盘子移到到C}}
若有不足地方请各位大佬指点
一个努力成为程序员的学生
- java菜鸟---------用java写的汉诺塔问题程序
- java菜鸟写博客
- java写的汉诺塔问题
- 菜鸟写的一段有问题的Java的代码!请高手指点!
- 【奔跑的菜鸟】第一个Java程序
- 在写JAVA程序的时候遇到的问题
- 以前用java写的计算器程序
- 用java写的计算器程序
- 用java写的计算器程序
- 用java写的一个压缩程序
- 用java写的远程监控程序
- 一个用JAVA写的画图程序
- 用Java写的计算器小程序
- 用java写的验证码程序
- 用java写的远程监控程序
- 用java写的俄罗斯方块小程序
- eclipse在编写Java程序时遇到的问题
- JAVA 写的日历程序
- spark 集群搭建*(3节点)
- RXJava从入门到熟练
- 用Linux shell脚本爬取豆瓣邮箱
- Edittext添加自定义过滤器
- greendao操作数据库升级导致表数据丢失
- java菜鸟---------用java写的汉诺塔问题程序
- AndroidStudio 查看Framework代码
- Remove Duplicates from Sorted Array
- 关于spring与springmvc的依赖注入的思考.
- 正则表达式(一) 匹配原理/贪婪与非贪婪
- 在使用Androidstudio打包签名apk文件时,Signature Versions V1(Jar Signature) V2(Full APK Signature)选项
- bootstrap-table简单应用
- jQuery自定义元素右键点击事件
- iOS常用设计模式