int ackermann(int m, int n){
if(m==0)return n+1;
if(m>0 && n==0)return ackermann(m-1,1);
return ackermann(m-1,ackermann(m,n-1));
}
int ackermann_loop(int m, int n){
int mm = m, nn = n;
while(mm!=0){
if(nn == 0) nn = 1;
else nn = ackermann_loop(mm,nn-1);
mm--;
printf("nn : %d \n",nn);
}
return nn+1;
}
int A[100][100];
int ackermann_loop(int m, int n){
for(int i = 0;i<=m;i++){
for(int j = 0; j<=50; j++){
if(i==0)A[i][j]=n+1;
else if(j==0)A[i][j]=A[i-1][j];
else{
int tmp = A[i][j-1];
A[i][j] = A[i-1][tmp];
}
}
}
return A[m][n];
}
int Acker_nonrecursive3(int m, int n)
int i;
int val=2;
if(m==0) return n+1;
if(m==1) return n+2;
if(m==2) return 2*n+ 3;
if(m==3) {
// return pow(2, n+3) -3; 또는 아래 for loop 으로
for(i=1; i<n+3; i++)
val *=2;
return val -3;
}
if(m==4){
for(i=1; i< n+3; i++)
val *=val;
return val=val-3;
}
}