汉诺塔问题
汉诺塔问题抽象化图:
这里就是关于汉诺塔问题的一个抽象化处理,要解决递归问题,关键就在于找到递推公式和趋于终止的条件;那么就这道题来说,趋于终止的条件是不是n=1,当n=1时,直接把大盘子移到C座上,接下来看代码:
public class Test {
/**
* 这里的move函数主要是求一个盘子的移动方式
* @param pos1
* @param pos3
*/
public static void move(char pos1,char pos3) {
System.out.print(pos1+"->"+pos3);
}
public static void hanoiTower(int n,char pos1,char pos2,char pos3) {
//终止条件
if(n == 1) {
move(pos1,pos3);
return;
}
//括号里表示的依次是n-1个盘子,初始位置,中间位置,末尾位置
hanoiTower(n-1,pos1,pos3,pos2);
System.out.println();
move(pos1,pos3);
System.out.println();
hanoiTower(n-1,pos2,pos1,pos3);
System.out.println();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
hanoiTower(n,'A','B','C');
}
}