汉诺塔(java详解)

汉诺塔(java详解)

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具,由法国数学家爱德华·卢卡斯于1883年发明。[1]

汉诺塔的玩法是将一个木桩上的圆盘转移到另外一个木桩。移动规则:1、一次只能移动一个圆盘;2、每个桩上只有最顶层的圆盘可以移动,并且所移动的圆盘只能移到空木桩上或者它要比木桩顶层已存在的圆盘小。也就是说,您不能将大圆盘置于小圆盘之上。常见的汉诺塔n=6~10,完成转移需要2n-1步。[1]

2023年3月,中国厦门市的8岁男孩郭弘奕,以单手成功完成4层汉诺塔,用时4.305秒。经世界纪录认证(WRCA)官方审核,郭弘奕成功打破“最快时间完成4层汉诺塔(单手)”世界纪录,并颁发WRCA世界纪录认证证书,载入WRCA世界纪录

建议试玩一下

汉诺塔游戏 (gitee.io)

采取递归的思想

分问题

  1. 大问题是如果将下面的移动到目标住

  2. 小问题无论上面的怎么移动的

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
su.func(input.nextInt(),'A','B','C');//第一次C是目标住
}
}

class su{
/*public*/ static void func(int num,char A,char B,char C){
if(num==1){
System.out.println(A+"--->"+C);
}else{
func(num-1,A,C,B);//不管上面的怎么移动
System.out.println(A+"--->"+C);
func(num-1,B,A,C);//这时候A是空的,所以是我们的工具柱
}
}
}

汉诺塔(java详解)
http://august244.github.io/2023/04/22/有趣问题/汉诺塔问题/
Author
August Rosenberg
Posted on
April 22, 2023
Licensed under