递归求解汉诺塔问题
描述:
有三个柱子标号为A,B,C。把A柱上的m个圆盘移动到C柱上,可以借助B柱。
规则:
1、每次只能移动一个圆盘。
2、小圆盘在上面,大圆盘在下面。
解题思路:
1、有一个圆盘,直接从A->C.
2、有m个圆盘,首先把(m-1)个圆盘从A->B(递归),再把第m个圆盘从A->C,最后(m-1)个圆盘从B->C(递归)。
代码如下:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入汉诺塔层数:");
int m=input.nextInt();
//m圆盘个数,A 源柱,B辅助柱,C目的柱
hanoi(m,'A','B','C');
}
public static void hanoi(int m,char A,char B,char C){
if(m==1){
System.out.println(A+"->"+C);
}
else{
hanoi(m-1,A,C,B);
System.out.println(A+"->"+C);
hanoi(m-1,B,A,C);
}
}
}
规律:如有一个圆盘移动1次;有两个圆盘移动3次;有三个圆盘7次;有四个圆盘移动15次。有m个圆盘时,移动(2^m-1)次。