递归问题:二汉诺塔
2014-03-07 18:14
239 查看
汉诺塔问题是法国数学家Edouard Lucas于1880年提出的。它已经成为计算机科学家的热门话题,因为该问题的解决方案极好的展示了递归的简洁性。该问题包含三个珠子和一些带有中孔的圆盘,这些圆盘可以在柱子间移动,每个圆盘具有不同的直径。刚开始时,所有圆盘按照尺寸对方在一个柱子上,即最大的圆盘放置在底部,我们可以使用另外一个柱子作为放置圆盘的临时位置,但是必须遵循以下3条规则:1一次只能移动一个圆盘 2不能将大圆盘放置在小圆盘的顶部 3除正在柱子间移动的圆盘外,其他所有圆盘都必须放置在某个柱子上。
package com.chingcloud.test01;
public class TowersOfHanoi {
private int totalDisks ;
public TowersOfHanoi(int disks){
totalDisks = disks ;
}
public void solve(){
moveTower(totalDisks,1,3,2) ;
}
private void moveTower(int numDisks,int start,int end,int temp){
if(numDisks == 1){
moveOneDisk(start,end) ;
}else{
moveTower(numDisks-1,start,temp,end) ;
moveOneDisk(start,end) ;
moveTower(numDisks-1,temp,end,start) ;
}
}
private void moveOneDisk(int start,int end){
System.out.println("Move one disk from " + start + " to " + end);
}
public static void main(String[] args) {
TowersOfHanoi t = new TowersOfHanoi(4) ;
t.solve() ;
}
}
package com.chingcloud.test01;
public class TowersOfHanoi {
private int totalDisks ;
public TowersOfHanoi(int disks){
totalDisks = disks ;
}
public void solve(){
moveTower(totalDisks,1,3,2) ;
}
private void moveTower(int numDisks,int start,int end,int temp){
if(numDisks == 1){
moveOneDisk(start,end) ;
}else{
moveTower(numDisks-1,start,temp,end) ;
moveOneDisk(start,end) ;
moveTower(numDisks-1,temp,end,start) ;
}
}
private void moveOneDisk(int start,int end){
System.out.println("Move one disk from " + start + " to " + end);
}
public static void main(String[] args) {
TowersOfHanoi t = new TowersOfHanoi(4) ;
t.solve() ;
}
}
相关文章推荐
- Hanoi汉诺塔问题——递归
- Python递归解决汉诺塔问题
- 递归5--汉诺塔问题的栈实现
- 汉诺塔问题的递归解法
- 递归、函数的调用机制及汉诺塔问题
- 汉诺塔问题 hanoi(递归)
- 汉诺塔问题的递归求解
- 递归的力量之汉诺塔问题
- 最近正准备找工作呢,熟悉下递归算法,做了几个递归的例子包括汉诺塔问题
- 汉诺塔问题的python递归实现
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 从汉诺塔问题来看“递归”本质
- 黑马程序员--汉诺塔问题的递归求解C语言
- 汉诺塔问题(递归)最清晰的回答 python
- 汉诺塔问题.递归
- 汉诺塔问题的递归解决方法
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- 汉诺塔问题 hanoi tower (递归)。
- 汉诺塔问题的递归实现(扩展)
- “汉诺塔“问题的递归实现