LeeCode选题
汉诺塔递归求解
汉诺塔介绍:
汉诺塔的的图形(从上到下1,2,3个)实现:
这里我们可以看到因为必须要将第n个移动到c区域,而移动到c区域之后,我们的由起始位置a变为起始位置b
move移动函数
第一步:因为代码肯定是由一个位置->另一个位置,我们可以写一个函数move来实现移动
java
public class test {
public static void move(char pos1,char pos2){
System.out.print(pos1+"=>"+pos2+" ");
//这里我们如果需要移动就要调用这两个函数
}
hanoi函数
第二步:main方法中肯定需要我们传入数值参数
定义hanoi函数移动n次,定义三个位置,pos1为起始位置,pos2为中转位置,pos3为终点
1.这里我们的条件是当汉诺塔为1个的时候,我们只需要将其pos1起始位置移动到pos3目的位置
2.当开始第二个第三个的时候我们可以发现每次n-1个的时候都要从c位置挪动到b上促使第n个移动到目标位置
3.这样我们的起始位置由pos1修改为pos2,我们在以pos1为中转到pos3上,
java
public static void hanoi(int n,char pos1,char pos2,char pos3){
if(n==1){
move(pos1,pos3);
return;
}
hanio(n-1,pos1,pos3,pos2);
move(pos1,pos3);
hanio(n-1,pos2,pos1,pos3);
}
main方法测试代码:
java
public static void main(String[] args){
hanio(1,'A','B','C');
System.out.println();
hanio(2,'A','B','C');
System.out.println();
hanio(3,'A','B','C');
System.out.println();
}