可以参考下面的代码:
目前创新互联建站已为上千余家的企业提供了网站建设、域名、雅安服务器托管、网站托管、企业网站设计、桂阳网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
#includestdio。h
voidprintData(intdata)
if(data==0)
return;
printf("%d",data%10);
printData(data/10);
intmain()巧答
intdata;
printf("Enteranumber:");
scanf("%d",data);
return0;
介绍
在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之培高上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种孝中慧函数是阿克曼函数。
这个代码是没有问题的,可以实现阿克亏搏滑曼函数的功能,我是用c语言试的,修改了一下银枝输入输出函数,给m,n赋了初值,结销腊果是对的。可以实现你想要的功能。
楼主如果要加300分,可能要开州困2贴了,因为1贴最多只能200分,追加最多只能50分。
你给的败扰那个解法,写的本来就有问题。
不信,你自己试试这个程序:
#includestdio.h
//非递归解法
int akm_nonrecursive(int m, int n)
{
int m1[50], n1[50], cp;
cp = 0;
m1[0] = m;
n1[0] = n;
do {
while (m1[cp] 0) { /* 压栈, 直到m1[cp] = 0 */
while (n1[cp] 0) { /* 压册枯念栈, 直到n1[cp] = 0 */
cp++;
m1[cp] = m1[cp - 1];
n1[cp] = n1[cp - 1] - 1;
}
/* 计算akm(m - 1, 1),当n = 0时 */
m1[cp] = m1[cp] - 1;
n1[cp] = 1;
}
/* 改栈顶为akm(m - 1, n + 1),当m = 0时 */
cp--;
m1[cp] = m1[cp] - 1;
n1[cp] = n1[cp + 1] + 1;
} while (cp 0 || m1[cp] 0);
return n1[0] + 1;
}
int main()
{
printf("%d\n",akm_nonrecursive(0,2));
printf("%d\n",akm_nonrecursive(2,0));
printf("%d\n",akm_nonrecursive(2,3));
return 0;
}
#includestdio.h型棚芹
int ack(int m,int n)
{if(m==0)return n+1;
if(m0n==0)return ack(m-1,1);
return ack(m-1,ack(m,n-1));
}
int main()
{ int m,n;
scanf("%d%d",卜毕m,n);
printf("和梁A(%d,%d)=%d\n",m,n,ack(m,n));
return 0;
}