n阶汉诺塔问题 java
时间: 2023-11-19 19:56:42 浏览: 94
汉诺塔问题是一个经典的递归问题,它是一个数学问题,源于印度一个古老传说。汉诺塔(Hanoi)问题的具体描述是:有三根相邻的柱子,标号为1、2、3。这三根柱子上分别有n个、n-1个、n-2个……1个大小的盘子,且小的在上,大的在下。现在要把第一个柱子上的盘子移动到第三个柱子上,同时保证大盘子在下,小盘子在上。在移动过程中,要满足下列限制条件:
1.每次只能移动一个盘子;
2.任何时刻都不能将一个大盘子放到小盘子的上面。
以下是n阶汉诺塔问题的Java实现代码:
```java
public class Hanoi {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入盘子数目");
int n = s.nextInt();
hanoi(n,1,2,3);
}
public static void moveUnder(int from, int to) {
System.out.println(from + "移动到" + to);
}
//假设2柱是初始柱,3柱是目标柱
public static void hanoi(int n,int from, int cross, int to) {
if (n == 1) {
moveUnder(from, to);
} else {
//把除了最下面的盘子从1柱借助3柱移动到2柱
hanoi(n-1,from, to, cross);
moveUnder(from, to);
//把上面n-1个盘子从2柱借助1柱子移动到3柱子
hanoi(n-1,cross, from, to);
}
}
}
```
阅读全文