hanoi
汉诺塔问题可能是递归入门一个绕不过的问题,也困扰了我好久,原理很简单,但是真的理解确实会废一点功夫,今天看了很多资料总算有一点认识了
伪算法部分
if(n>1){
1. 先把A柱子上的n-1个盘子从A借助C传到B
2. 把A上的第n个盘子直接移到C
3. 再将B柱子上的n-1个盘子借助A移到C
}
此处之前的理解有点谬误 因为看了一本书上面将B作为目的节点造成了一点点烦恼
<pre name="code" class="cpp">#include <stdio.h>
#include <stdlib.h>
void hanoi(int n,char x,char y, char z)//x-->z pass by y
{
if( 1==n)
{
printf("将%d号盘子%c-->%c\n",n,x,z);
}
else
{
hanoi(n-1,x,z,y); //先把A柱子上的n-1个盘子从A借助C传到B
printf("将%d号盘子%c-->%c\n",n,x,z);//把A上的第n个盘子直接移到C
hanoi(n-1,y,x,z);//再将B柱子上的n-1个盘子借助A移到C
}
}
int main()
{
char x = 'A';
char y = 'B';
char z = 'C';
printf("请输入盘子的个数:\n");
int n =3;
// scanf("%d",&n);
hanoi(n,x,y,z);
getchar( );
return 0;
}