我不知道是谁定义的这个函数
成都创新互联公司服务项目包括大城网站建设、大城网站制作、大城网页制作以及大城网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,大城网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到大城省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
ack(m,n)是个分段函数
当m=0时,ack(m,n)=n+1
当n=0时,ack(m,n)=ack(m-1,1)
当m0且n0时,ack(m,n)=ack(m-1,ack(m,n-1))
举一个例子
计算ack(1,1)的值,因为m0且n0所以调用ack(m,n)=ack(m-1,ack(m,n-1)),则ack(1,1)=ack(1-1,ack(1,1-1))
=ack(0,ack(1,0))
接着计算ack(1,0)因为n=0,所以调用ack(m,n)=ack(m-1,1),则ack(1,0)=ack(1-1,1)=ack(0,1)
即ack(1,0)=ack(0,1)
可以进一步化简我们的结果ack(0,ack(1,0))=ack(0,ack(0,1))
接下来计算ack(0,1)因为m=0所以调用ack(m,n)=n+1
则ack(0,1)=1+1=2
进一步化简我们的结果
ack(0,ack(0,1))=ack(0,2)再调用ack(m,n)=n+1
则ack(0,2)=2+1=3
全部的运算过程
ack(1,1)=ack(0,ack(1,0))=ack(0,ack(0,1))=ack(0,2)
=3
我写的不好,如果还是不太懂的话,我可以写的再详细一点
int main(){
int ack(int m,int n){
if(m==0) return n+1;
if(n==0) return ack(m-1,1);
if(n0m0) return ack(m-1,ack(m,n-1));
}
printf("%d\n",ack(0,3));/*可以换成你要测试的数据*/
printf("%d\n",ack(1,0));
printf("%d\n",ack(3,2));
return 0;
}
#include stdio.h
#include stdlib.h
int ack(int m, int n);
int main()
{
int m,n,h;
printf("put into m=");
scanf("%d",m);
printf("put into n=");
scanf("%d",n);
h=ack( m, n);
printf("%d",h);
return 0;
}
int ack(int m, int n)
{
if(m==0)
return n+1;
if(n==0)
return ack(m-1,1);
if(m!=0n!=0)
return ack(m-1,ack(m,n-1));
if(mn)
{
printf("error");
return 0;
}
}
#include stdio.h
void main()
{ int Ack(int m,int n);
int m,n;
printf("\nEnter m and n:\n");
scanf("%d,%d",m,n);
printf("Ack(%d,%d)=%d\n",m,n,Ack(m,n));
}
int Ack(int m,int n)
{ if(m==0)
return(n+1);
else if(n==0)
return(Ack(m-1,1));
else
return(Ack((m-1),Ack(m,n-1)));
}
用简单的C的递归就可以实现了 ,由于电脑问题,结果图片上传不了,不过可以运行