问题描述
问题描述:古代有一个梵塔,塔内有三个柱予A,B,C,僧侣们想把A柱子上的一摞盘子移动到C柱子上。最初A柱子上有大小不等的64个盘子,且小的在上,大的在下,在移动过程中,大盘子只能在下,小盘子只能在上,并且每次只能移动一个盘子,可以借助于B柱子。画流程图,实现函数,并用主函数验证其有效性。
流程图
代码
下面展示 内联代码片
。
//汉诺塔
#include<stdio.h>
void move(int x,int y){
printf("%c-->%c\n",x,y);
}
void hanoi(int n,char a,char b,char c){
if(n==1){
move(a,c);
}
else{
hanoi(n-1,a,c,b); //将A上的n-1个盘子 借助C移向B
move(a,c); //移动A上第n个盘子到目标柱子C
hanoi(n-1,b,a,c); //递归,借助A将B上的盘子移向C
}
}
int main(){
int n;
printf("一共有多少个盘子:\n");
scanf("%d",&n);
hanoi(n,'A','B','C');
return 0;
}