汉诺塔问题:C语⾔实现(递归)和伪代码C语⾔实现代码
#include<stdio.h>
void hanoi(int,char,char,char);
void move(char,char);
# 主函数
int main(){
int n;
printf("输⼊汉诺塔的层数:");
scanf("%d",&n);
hanoi(n,'A','B','C');
return0;
}
# 算法核⼼
void hanoi(int n,char x,char y,char z){
if(n==1){
move(x,z);
}else{
hanoi(n-1,x,z,y);
move(x,z);
hanoi(n-1,y,x,z);
}
}
# 每移动⼀次盘⼦,打印输出
void move(char c1,char c2){
printf("%c -> %c\n",c1,c2);
}
伪代码
设圆盘层数为n,三个柱⼦分别是A,B,C
hanoi(n,A,B,C){
# 递归出⼝
if(n==1)
then{
#把当前递归程序的A移动到C
print(A->C)}
else{
# 进⼊递归
hanoi(n-1,A,C,B)
#把当前递归程序的A移动到C
print(A->C)
# 进⼊递归
hanoi(n-1,B,A,C)
递归函数c语言规则}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论