C语言题汉诺塔分析

来源:百度知道 编辑:UC知道 时间:2024/09/21 03:13:38
1.A B C3座 A座上盘移动到B座:
#include<stdio.h>
void hanoi(int n,char a,char b,char c)
{
if(n==1)
printf("%c-->%c\n",a,b);
else{
hanoi(n-1,a,c,b);
printf("%c-->%c\n",a,b);
hanoi(n-1,c,b,a);
}
}
int main(void)
{
int n;
printf("input n:");
scanf("%d",&n);
printf("the steps for %d disk are:\n",n);
hanoi(n,'A','B','C');
return 0;
}
核心:
hanoi(n-1,a,c,b); ...... n-1个盘子通过B从A移动到C
printf("%c-->%c\n",a,b);....第n个盘子从A-->B
hanoi(n-1,c,b,a);.......n-1个通过A来C-->B
核心()内的为什么这样排列
另外一例题A座移到C做的则是如下
hanoi(n-1,a,c,b); ... n-1个盘子通过C从A移动到B
printf("%c-->%c\n",a,c);...第n个盘子从A-->C
hanoi(n-1,b,a,c);......n-1个通过A来B-->C

就是参数的顺序不同而已:BC换了一个位置罢了

hanoi(n-1,a,c,b); ... n-1个盘子通过B从A移动到C
printf("%c-->%c\n",a,b);....第n个盘子从A-->B

void hanoi(int n,char a,char b,char c)通过B从A移动到C
----------------------------------------------
hanoi(n-1,a,c,b); ... n-1个盘子通过C从A移动到B
printf("%c-->%c\n",a,c);...第n个盘子从A-->C

void hanoi(int n,char a,char b,char c)通过C从A移动到B