一.问题
汉诺塔类型问题(三个柱子,n个块)
二.理解
将需要移动的“块”看作是两个部分,分别是最低层的“1”和剩余的“n-1”,先将上面的n-1块这个整体移动到B柱子上,然后再将“1”移动到C柱子上,最后将B柱上的“n-1”移动到C上。
三.代码
C语言代码:
#include<stdio.h>
void hanoi(int n,char A,char B,char C){
if(n==1){
printf("%c->%c\n",A,C);
}else{
hanoi(n-1,A,C,B);
printf("%c->%c\n",A,C);
hanoi(n-1,C,A,B);
}
}
int main(){
hanoi(4,'a','b','c');
printf("\n");
return 0;
}
Java代码:
// 定义一个名为HanoiTower的公共类
public class Hanoi {
// 定义一个名为hanoi的静态方法,用于解决汉诺塔问题
// 参数包括盘子数量n,以及三个柱子的标识A、B、C
public static void hanoi(int n, char A, char B, char C) {
// 如果只有一个盘子,直接将它从A移动到C
if (n == 1) {
System.out.println(A + "->" + C);
} else {
// 递归地将n-1个盘子从A通过C移动到B
hanoi(n - 1, A, C, B);
// 将剩下的一个盘子从A移动到C
System.out.println(A + "->" + C);
// 递归地将n-1个盘子从B通过A移动到C
hanoi(n - 1, B, A, C);
}
}
// 程序的入口点,主方法
public static void main(String[] args) {
// 调用hanoi方法,解决有4个盘子的汉诺塔问题,从柱子a通过柱子b移动到柱子c
hanoi(4, 'a', 'b', 'c');
// 打印一个换行符,使输出更加整洁
System.out.println();
}
}