汉诺塔通过递归方法实现,可以将n个盘子依次的变成n-1个盘子,每次调用函数时,就是将盘子插在x,y,z不同位置上,通过对x,y,z位置进行改变解决问题。
假设盘子最初都插在x上,主要是三个步骤:
- 将n-1个盘子借助z移到y上
- 将x上的最后一个盘子移到z上
- 将y上的盘子借助x移到z上
void move(int n,char x,char y,char z){
if(n==1){
printf("%c-->%c\n",x,z);
}
else{
move(n-1,x,z,y);//将n-1个盘子x->y(z为辅助)
printf("%c-->%c\n",x,z);
move(n-1,y,x,z);
}
}
int main(){
int n=3;
move(n,'x','y','z');
return 0;
}