下面是一个简单的Java示例,展示了如何实现汉诺塔(Tower of Hanoi)问题。汉诺塔问题是一个经典的递归问题,涉及将一堆大小不同、穿在一根针上的盘子移动到另一根针上,同时遵守以下规则:
1. 每次只能移动一个盘子。
2. 任何时候,较大的盘子都不能放在较小的盘子上面。
通常有三根针:A、B和C。开始时,所有盘子都堆叠在针A上,目标是将所有盘子移动到针C上,针B可以作为辅助工具。
public class HanoiTower {
/**
* 解决汉诺塔问题的方法
* @param n 盘子的数量
* @param from 起始针
* @param aux 辅助针
* @param to 目标针
*/
public static void hanoi(int n, char from, char aux, char to) {
if (n == 1) {
// 只有一个盘子时,直接移动到目标针
System.out.println("Move disk 1 from " + from + " to " + to);
return;
}
// 将上面的n-1个盘子通过目标针移动到辅助针
hanoi(n - 1, from, to, aux);
// 将最大的盘子从起始针移动到目标针
System.out.println("Move disk " + n + " from " + from + " to " + to);
// 将n-1个盘子从辅助针移动到目标针
hanoi(n - 1, aux, from, to);
}
public static void main(String[] args) {
int n = 3; // 假设有3个盘子
hanoi(n, 'A', 'B', 'C'); // 从A针移动到C针,B针作为辅助
}
}
这段代码首先定义了一个`hanoi`方法,它递归地解决汉诺塔问题。在`main`方法中,我们调用`hanoi`方法,并传入盘子数量(例如3)和三根针(A、B、C)的标识。程序将输出移动盘子的步骤。