新手-老谭教材-汉诺塔问题求解!
先上程序(比较简单,我初中生也看的懂):
#include<stdio.h>
void main()
{
void hanoi(int n,char one,char two,char three); /*对hanoi函数声明*/
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to moveing %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three) /* 定义hanoi函数 将N个盘从one座借助two座移到three座*/
{
void move(char x,char y); /*对move函数声明*/
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
终于打完程序了! 我看的懂这个程序的算法,就是递归思想。但是我看不明白这个程序是怎么样一步一步输出结果的。
比如教程给的是:当 n=3 的时候,输出的答案是如下:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
我按照程序一步一步走的去读程序,但是他总是递归 我搞不定楚具体的流程,请大家指教下!
[解决办法]
三个柱:A,B,C
把N个盘子借助B借,从A柱移到C柱:
老师给的一个土办法,就这么给记信了:
1. 老和尚先叫小和尚把A柱上面的N-1个盘子借助C柱先移到B柱
2. 老和尚把第N个盘子从A柱移到C柱
3. 老和尚再叫小和尚把B柱上面的N-1个盘子借助A柱移到C柱
很关键一个词,借助