汉诺塔递归实现算法
1 #include<stdio.h> 2 int c=0;//全局变量,搬动次数 3 void move(char x,int n,char z) 4 {//第n个圆盘从塔座x搬到塔座z 5 printf("第%i步:将%i号盘从%c移到%c\n",++c,n,x,z); 6 } 7 8 void hanoi(int n,char x,char y,char z) 9 { 10 //将塔座X上按直径由小到大且自上而下编号为1到n的圆盘按规则移到塔座Z上。y可用作辅助塔座 11 if(n==1) 12 move(x,1,z);//将编号为1的圆盘从x移到z 13 else 14 { 15 hanoi(n-1,x,z,y);//将编号为1~n-1的圆盘移到y,z作为辅助 16 move(x,n,z);//将编号为n的圆盘从x移到z 17 hanoi(n-1,y,x,z);//将y上编号为1到n-1的圆盘移到z,x作为辅助塔座 18 } 19 } 20 21 void main() 22 { 23 int n; 24 printf("3个塔座为a,b,c,圆盘最初在a座,借助b座移到c座。请输入圆盘数:"); 25 scanf("%d",&n); 26 hanoi(n,'a','b','c'); 27 }
ACKman函数:
1 #include<stdio.h> 2 int ack(int m,int n) 3 { 4 int z; 5 if(m==0) 6 z=n+1; 7 else if(n==0) 8 z=ack(m-1,1); 9 else 10 z=ack(m-1,ack(m,n-1)); 11 return z; 12 } 13 14 void main() 15 { 16 int m,n; 17 printf("Please input m,n:"); 18 scanf("%d%d",&m,&n); 19 printf("Ack(%d,%d)=%d\n",m,n,ack(m,n)); 20 }
浙公网安备 33010602011771号