关于汉诺塔递归调用问题
我知道汉诺塔的递归调用是把前n-1个盘子从A上通过C移到B上,然后把第n个盘子从A移到C上,最后通过A,把B上的盘子移到C上,但具体过程还是不是很清楚,为什么可以这样实现。还有盘子为奇数与偶数的时候,第一步移动的方式怎么会不同呢,不是都用递归到移动第一个盘子的时候,就通过C移到B上吗?怎么会有先移到B上的呢?望详解!
------解决方案--------------------C/C++ code
#include<stdlib.h>
#include<stdio.h>
#define YI 1
#define ER 2
#define SAN 3
void ydyp(int,int,int,int);
int main(void)
{
int n;
printf("请输入圆盘的个数\n");
scanf("%d",&n);
if (n>0)
{
ydyp(n,YI,ER,SAN);
}
else
printf("输入不合理数值\n");
system("PAUSE");
return 0;
}
void ydyp(int n,int yi,int er,int san)
{
if(n>0)
{
ydyp(n-1,yi,san,er);
printf("从第%d跟柱子移动一个圆盘到第%d跟柱子\n",yi,san);
ydyp(n-1,er,yi,san);
}
return;
}
------解决方案--------------------