云中烛火

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

汉诺塔递归实现算法
       

 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 }

 

posted on 2013-11-16 13:23  云中烛火  阅读(556)  评论(0)    收藏  举报