汉诺塔问题的递归解法是一个非常经典的算法。
一、递归描述
1 、当disc=1时:
将盘子从X柱直接移到Z柱;
完成。
2、当disc=2时:
首先将编号为1的盘子从X柱移到Y柱;
其次将编号为2的盘子从X柱移到Z柱;
最后将编号为1的盘子从Y柱移到Z柱;
完成。
3、由2推广可知,当disc=n时:
首先将n-1个盘子从X柱移到Y柱;
其次将编号为n的盘子从X柱移到Z柱;
最后将n-1个盘子从Y柱移到Z柱;
完成。
二、利用C++实现该递归算法
String Hanoi(int number, String X, String Y, String Z)
{
if(number==1)
{
result=result+"Step-"+IntToStr(step)+" Move disc "+IntToStr(number)+" from "+X+" to "+Z+"\n";
step++;
}else
{
Hanoi(number-1, X, Z, Y);
result=result+"Step-"+IntToStr(step)+" Move disc "+IntToStr(number)+" from "+X+" to "+Z+"\n";
step++;
Hanoi(number-1, Y, X,Z);
}
return result;
}
四、算法测试——求解河内塔问题
河内塔问题就是disc=8的汉诺塔问题。
结算结果
由此可见,汉诺塔递归算法的时间复杂度为