问答题 试推导当总盘数为n时的Hanoi塔的移动次数。
【正确答案】
【答案解析】描述Hanoi塔问题的递归算法如下:
void Hanoi (int n,char x,char y,char z){
if (n==1)move(x,1,z);
else{
Hanoi (n-1,x,z,y);
move (x,1,z);
Hanoi (n-1,y,x,z);
}
}
设move()函数执行的移盘次数为常数1,则Hanoi塔问题总的运算次数为:
T(1)=1;
T(2)=2×T(1)+1=3=2 2 -1;
T(3)=2×T(2)+1=2×3+1=7=2 3 -1;
T(4)=2×T(3)+1=2×7+1=15=2 4 -1;

T(n)=2×T(n-1)+1=2 n -1