至于逻辑上是否正确,你自己根据Ackermann函数Ack(m,n)检验下就可以了。语法上都可以了,我这边运行可以通过,M,N稍微小一点,否则计算太大要出问题。
创新互联专注于西岗企业网站建设,响应式网站,成都商城网站开发。西岗网站建设公司,为西岗等地区提供建站服务。全流程按需制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
Ackermann函数是一个常用于计算机科学领域的连续递归函数,用来测试计算机算力的强大程度。Ackermann函数的声明如下:其中m和n均为非负整数。Ackermann函数的递归算法如下:该算法通过递归调用本身来计算Ackermann函数的值。
你的n、x、y都是int型的,其值要小于65536,但是但输入数字nxy分别为4,2,4时就达到65536,所以程序本身并没有问题,有问题的是数值类型的取值范围太小。
这个是著名的Ackerman(阿克曼)函数,典型的非原始递归的递归函数,m=3的时候像我上面的递推和计算很简单,但是一旦再大就会很麻烦,甚至计算机会彻底无法计算。
阿克曼函数(Ackermann)是非原始递归函数的例子。它需要两个自然数作为输入值,输出一个自然数。它的输出值增长速度非常高,仅是对于(4,3)的输出已大得不能准确计算。
1、程序语法正确,但有逻辑错误。你把最后那个for语句中的两个a[c[l]]改成:a[l]就好了。
2、因为你输入的是字符,而Case语句都是用的整数0,1,2,。。
3、参与|运算的两个二进制位有一个为 1 时,结果就为 1,两个都为 0 时结果才为 0。
4、可以改成这样:我重新看了下你代码,t要改成double。j循环初值要写i+1不是1(j对应i后一个开始)。
The value of Ackerman function is,这句话的意思是“阿克曼函数的值是”Ackermann函数定义如下:若m=0,返回n+1。若m0且n=0,返回Ackermann(m-1,1)。若m0且n0,返回Ackermann(m-1,Ackermann(m,n-1))。
Ackermann函数的递归算法如下:该算法通过递归调用本身来计算Ackermann函数的值。如果 m = 0,函数返回 n+1;如果 n = 0,函数返回 A(m-1, 1);否则,函数返回A(m-1, A(m, n-1))。
Ackerman函数有A(n,m)有两个独立的整变量m=0,n=0,其定义如下A(1,0)=2;A(0,m)=1 m=0A(n,0)=n+2 n=2A(n,m)=A(A(n-1,m),m-1) n,m=1A(n,m)的每一个自变量都定义了一个单变量函数。
对于C语言我们首先要学会的便是输出“Hello world”,那么今天我们就实现Helloworld的输出。在主程序优先写出main函数,然后便是对于我们要用到的内容开始书写。
事实上,阿克曼函数的值是极大的。Ackermann(0,n)=n+1 Ackermann(1,n)=n+2 Ackermann(2,n)=2*n+3 Ackermann(3,n)=2^(n+3)-3 Ackermann(4,n)=2^2^2^……^2-3,乘幂中共有n+3个2。