关于汉诺塔递归调用问题
我知道汉诺塔的递归调用是把前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;}
[解决办法]