设A、B、C为三个塔座,一开始A塔座上有n个自上而下、由小到大按顺序(可编号1,2,3...n)叠放在一起的圆盘,需要把A塔座上的盘全部移动到C塔座上,并且需要保持原有的顺序,但是要求每次只能移动一个盘子,并且在移动过程中A、B、C都必须始终保持小盘在上,大盘在下,操作过程盘子可置于A、B、C任一塔座上
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,B,A,C);
}
}
求其时间复杂度,首先必须将T(n)求解出来 ,问题转化为求解:已知T(1)=1
T(n)=2T(n-1)+1,求T(n)
T(n)+1 = 2T(n-1)+2
↓↓
T(n)+1 = 2(T(n-1)+1) ----易得出此等比数列的构造
↓↓
公比q=2,首项T(1)=1
↓↓
T(n)=2n-1
↓↓
时间复杂度=O(2n)