递归问题:二汉诺塔-阿里云开发者社区

开发者社区> 云计算> 正文
登录阅读全文

递归问题:二汉诺塔

简介:

汉诺塔问题是法国数学家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() ;
}
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

其他文章