原创,未经允许,不得转载。
递归属于分治法(divide and conquer)。
遇到递归问题,可以分为三个步骤。
1 分解
2 解决
3 合并
hanoi塔问题,可以经过以上三个步骤来解决,
1 分解
将n个盘子的移动问题,分解为上面n-1个盘子和1个(下面第n个)盘子的移动问题;
2 解决
若n==1
将1个盘子从x移动到z。
若n>1
将上面n-1个盘子从x移动到y;
将1个(下面第n个)盘子从x移动到z;
(3 合并) 将y上面n-1个盘子从y移动到z;
void hanoi(int n,char x,char y,char z)
{
if(n==1)
move(n,x,z);
else{
hanoi(n-1,x,z,y);
move(n,x,z);
hanoi(n-1,y,x,z);
}
}