(1)
1 #include<stdio.h> 2 typedef struct{ 3 int vm,vn,vf; 4 int tag; 5 }item; 6 typedef struct{ 7 item element[50]; 8 int top; 9 }Stack; 10 void Init(Stack*S) 11 { 12 S->top=-1; 13 } 14 void Push(Stack*S,item x) 15 { 16 S->element[++S->top]=x; 17 } 18 item Pop(Stack*S) 19 { 20 item x; 21 x=S->element[S->top--]; 22 return x; 23 } 24 int Ackerman(item e) 25 { 26 Stack T; 27 Init(&T); 28 Push(&T,e); 29 while(T.top!=-1) 30 { 31 if(T.element[T.top].tag) 32 { 33 if(T.element[T.top].vm==0) 34 { 35 T.element[T.top].vf=T.element[T.top].vn+1; 36 T.element[T.top].tag=0; 37 } 38 else if(T.element[T.top].vm!=0&&T.element[T.top].vn==0) 39 { 40 e.vm=e.vm-1; 41 e.vn=1; 42 e.tag=1; 43 Push(&T,e); 44 } 45 else if(T.element[T.top].vm!=0&&T.element[T.top].vn!=0) 46 { 47 e.vn=e.vn-1; 48 e.tag=1; 49 Push(&T,e); 50 } 51 } 52 else if(!T.element[T.top].tag) 53 { 54 if(T.element[T.top-1].vm!=0&&T.element[T.top-1].vn==0) 55 { 56 e=Pop(&T); 57 T.element[T.top].vf=e.vf; 58 T.element[T.top].tag=0; 59 } 60 else if(T.element[T.top-1].vm!=0&&T.element[T.top-1].vn!=0) 61 { 62 e=Pop(&T); 63 T.element[T.top].vm=T.element[T.top].vm-1; 64 T.element[T.top].vn=e.vf; 65 } 66 } 67 if(T.top==0&&!T.element[T.top].tag)break; 68 } 69 return T.element[T.top].vf; 70 } 71 int main() 72 { 73 item e; 74 scanf("%d %d",&e.vm,&e.vn); 75 e.tag=1; 76 printf("%d",Ackerman(e)); 77 return 0; 78 }
(2)
1 #include<stdio.h> 2 int Ackerman(int m,int n) 3 { 4 if(!m)return n+1; 5 else if(m&&!n)return Ackerman(m-1,1); 6 else if(m&&n)return Ackerman(m-1,Ackerman(m,n-1)); 7 } 8 int main() 9 { 10 int m,n; 11 scanf("%d %d",&m,&n); 12 printf("%d",Ackerman(m,n)); 13 return 0; 14 }