求解汉诺塔的递归问题

先上代码


void towersOfHanoi(int n,int x,int y,int z)
{//把塔x顶部的n个碟子移到塔y
//用塔z作为中转地
if(n>0)
{
towersOfHanoi(n-1,x,z,y);
cout<<"Move top disk from tower"<<x<<"to top of tower"
<<y<<endl;
towersOfHanoi(n-1,z,y,x);
}
}

这里也分基础部分和递归部分,但是这里的基础部分并不明显,这里的基础部分就是当x上的碟数为1时,if里面的第一和第三句代码直接退出,只有第二句代码会执行。这里的第二句代码就是基础部分,然后老规矩迭代部分我们只需要考虑最外层的一次运行逻辑就可以了,其他迭代部分交给计算机。
首先将x塔上的n-1个碟片移动到z塔上,然后将x上最后一个碟片移动到y塔上,最后再将z塔上的n-1个盘子移动到y塔上,这样最外层运算完成,代码也完成了。

猜你喜欢

转载自blog.csdn.net/du_shuang/article/details/81142536