?? ackerermann1.cpp
字號(hào):
#include<stdio.h>
int ackermann(int,int);
void main()
{
int m,n,result;
printf("Ackermann(m,n)\nPlease enter m:");
scanf("%d",&m);
printf("Please enter n:");
scanf("%d",&n);
result=ackermann(m,n);
printf("the Ackmann(%d,%d) is %d\n",m,n,result);
}
int ackermann(int m,int n)
{
int i,j;
int *val=new int[m+1];
int *ind=new int[m+1];
for(i=1;i<=m;i++)
{
ind[i]=-1;
val[i]=0;
}
ind[0]=0;
val[0]=1;
while(ind[m] < n)
{
val[0]++;
ind[0]++;
printf("%d ",val[0]);
for(j=1;j<=m;j++)
{
//根據(jù)當(dāng)n=0時(shí),A(m,0)=A(m-1,1),
//又val[i]=A(i,ind[i]),
//即當(dāng)ind[i-1]=1,若有ind[i]=0,可求出val[i]=val[i-1]
if(1==ind[j-1])
{
val[j]=val[j-1];
ind[j]=0;
}
//根據(jù)當(dāng)n>0,m>0時(shí),A(m,n)=A(m-1,A(m,n-1))
//又val[i]=A(i,ind[i])
//即當(dāng)ind[i-1]=val[i],ind[i]增1時(shí),相應(yīng)的val[i]=val[i-1]
if(val[j]==ind[j-1])
{
ind[j]++;
val[j]=val[j-1];
}
else break;
}
}//以此不斷增大ind[m]的值,不斷接近n,直至等于n時(shí),val[m]就是要求的值
printf("\n");
printf(" i ind[i] val[i]\n");
for(i=0;i<=m;i++)
printf("%5d %6d %6d\n",i,ind[i],val[i]);
return val[m];
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -