汉诺塔问题:
1.有三个杆子A,B,C,A杠上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移动到C杆上
解题思路:
递归思想。
当 n = 1时,将碟子直接从A移动到C
当n != 1时
1)将n-1个碟子通过C从A移动到B
2)移动第n个碟子从A移动到C
3)将n-1个碟子通过A从B移动到C
代码如下:
public class Hanoi {
void move(int n, char A, char B, char C){
if(n == 1){
System.out.println("the 1 plate move " + A + " to " + C);
}else{
move(n-1, A, C, B);
System.out.println("the "+n+" plate move " + A + " to " + C);
move(n-1, B, A, C);
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("please input the count of plate:");
int n = in.nextInt();
Hanoi hanoi = new Hanoi();
hanoi.move(n, 'A', 'B', 'C');
}
}
算法时间复杂度:
T(1) = O(1)
T(n) = 2 * T(n-1) + O(1)
递归算出来的时间复杂度为O(2 ^ n)