本人比较笨,汉诺塔问题想了老久才想明白。
假设有3个柱子,A,B,C
如果只有1个盘子,只要将盘子1从A移动到C。
如果有N个盘子,可以将N分成N-1,和最下面的N盘子。
要想将盘子N移动到C柱子,就必须将N-1移动到B柱子,其中需要借助的是C柱子,然后将盘子N移动到C柱子上。
随后将N-1个盘子借助A柱子移动到C柱子。
这就是一次过程,随后就是递归了。
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void hanoi(int n,char A,char B,char C)
{
if(n==1)
printf("Move sheet %d from %c to %c\n",n,A,C);
else
{
hanoi(n-1,A,C,B);
printf("Move sheet %d from %c to %c\n",n,A,C);
hanoi(n-1,B,A,C);
}
}
main()
{
int n;
do
{
printf("请输入盘数:");
scanf ("%d",&n);
hanoi (n,'A','B','C');
}while(n);
}