【递归经典题目】汉诺塔算法 Java实现
来源:互联网 发布:神器挂机软件 编辑:程序博客网 时间:2024/05/18 17:02
汉诺塔问题描述:
假设有三个命名为a(TOWER 1),b(TOWER 2),c(TOWER 3)的塔座,在塔座X上有n个直径大小各不相同,依次从小到大编号为1,2,3,...,n的圆盘。现要求将a塔座上的n个圆盘移到c塔座上并按同样顺序叠排,
假设有三个命名为a(TOWER 1),b(TOWER 2),c(TOWER 3)的塔座,在塔座X上有n个直径大小各不相同,依次从小到大编号为1,2,3,...,n的圆盘。现要求将a塔座上的n个圆盘移到c塔座上并按同样顺序叠排,
圆盘移动时必须遵循下列规则:
1)每次只能移动一个圆盘;
2)圆盘可以插在a,b,c中的任意塔座上;
3)任何时刻都不能将一个较大的圆盘压在较小的圆盘之上。
算法分析:
1.当n=1时,移动方式: a->c
2.当n=2时,移动方式: a->b, a->c, b->c
3.当n=3时, 移动方式: 我们需要把上面两个2,借助c塔,移动到b塔上,然后把a塔的最大的盘移动到c塔,再借助a塔把b塔的两个盘移动到c塔(调用f(2)函数)
1.当n=1时,移动方式: a->c
2.当n=2时,移动方式: a->b, a->c, b->c
3.当n=3时, 移动方式: 我们需要把上面两个2,借助c塔,移动到b塔上,然后把a塔的最大的盘移动到c塔,再借助a塔把b塔的两个盘移动到c塔(调用f(2)函数)
import java.util.Scanner;public class Hanoi {static long s = 0;public static void main(String args[]) {int n = 0;Scanner console = new Scanner(System.in);n = console.nextInt();System.out.println("汉诺塔层数为" + n);System.out.println("移动方案为:");hanoi(n, 'a', 'b', 'c');System.out.println("需要移动次数:" + s);}static void hanoi(int n, char a, char b, char c) { //a为初始塔,b为中间塔,c为目标塔if (n == 1){ System.out.println("n=" + n + " " + a + "-->" + c); s++; }else{ /*递归的调用*/ hanoi(n-1,a,c,b); System.out.println("n=" + n + " " + a + "-->" + c); hanoi(n-1,b,a,c); s++; }}}
0 0
- 【递归经典题目】汉诺塔算法 Java实现
- 用java实现的经典递归算法
- 用java实现的经典递归算法
- 用java实现的经典递归算法
- Python实现汉诺塔递归经典算法
- Python实现汉诺塔递归经典算法
- 【递归经典题目】欧几里得算法求最大公约数
- 递归和分治算法---经典题目
- 递归经典初级题目--汉诺塔
- 【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
- 【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
- 经典递归算法,汉诺塔
- 汉诺塔算法(经典递归)
- 经典汉诺塔递归算法
- Java经典例题之汉诺塔<递归实现>
- java实现的经典递归算法三例
- java实现的经典递归算法三例
- java实现的经典递归算法三例 (转)
- ios不错的学习资源
- iOS8来了!苹果WWDC 2014将于6月2日举行
- cocos2d-x 对字符串的传值操作
- or1200处理器的数据处理类指令说明
- 一张图说明Linux内核
- 【递归经典题目】汉诺塔算法 Java实现
- 【剑指offer】题目1385:重建二叉树
- 一种使用QThread线程的新方法QObject::moveToThread
- ARC开启的情况下是否需要对GCD对象dispatch_release ?
- Tomcat负载均衡原理详解及配置(Apache2.2.19+Tomcat7.0.12)
- PowerBuilder 双击datawindow列标题排序
- JAVA基础应用总结
- Cocos2d-html5 touch事件总结
- Kendo UI Web教程大全