递归问题:二汉诺塔

简介:

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

目录
相关文章
|
6月前
|
算法 C语言
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
54 0
|
7月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
98 0
|
7月前
|
机器学习/深度学习
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
57 0
汉诺塔 递归问题
汉诺塔 递归问题
84 0
递归问题的实际运用:汉诺塔问题
递归问题的实际运用:汉诺塔问题
113 0
递归问题的实际运用:汉诺塔问题
|
C++ C语言
你是真的“C”——函数递归详解汉诺塔
利用函数递归手把手求解汉诺塔
109 0
你是真的“C”——函数递归详解汉诺塔
|
C语言
【C】青蛙跳台阶和汉诺塔问题(递归)
【C】青蛙跳台阶和汉诺塔问题(递归)
125 0
【C】青蛙跳台阶和汉诺塔问题(递归)
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
245 1
汉诺塔(递归+ 非递归版)