c语言ack函数 ACK指令

一个简单的C语言问题

我不知道是谁定义的这个函数

成都创新互联公司服务项目包括大城网站建设、大城网站制作、大城网页制作以及大城网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,大城网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到大城省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

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;

}

C语言编程,递归求解函数ack()在线等!!!

#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;

}

}

C语言Ackemann函数程序设计

#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的递归就可以实现了 ,由于电脑问题,结果图片上传不了,不过可以运行


分享文章:c语言ack函数 ACK指令
URL链接:http://hbruida.cn/article/doogdho.html