## 在递归函数论和涉及集合的并的某些算法的复杂性研究中,有一个起重要作用的递归函数——阿克曼(Ackermann)函数,该函数是由希尔伯特的学生,德国著名数学家威尔海姆·阿克曼于1928年发现的。这是一个图灵机可计算的,但不是原始递归的函数。下面,我们介绍这个经典的递归函数,并给出其相应的计算过程。
公式:
例如:
A( 1 ,2 )= A ( 0 , A ( 1 , 1 ) )
=A ( 0 , A ( 0 , A ( 1 , 0 ) ) )
=A ( 0 , A ( 0 , A ( 0 , 1 ) ) )
=A ( 0 , A ( 0 , 2 ) )
=A ( 0 , 3 )
=4
下面我们将用程序对其进行运算;
##递归算法:
#include<stdio.h> #include<math.h> using namespace std; int Ackermann(int m,int n) { if(m==0){ return n+1; } else if(n==0){ return Ackermann(m-1,1); } else(m>0&&n>0);{ return Ackermann(m-1,Ackermann(m,n-1)); } } int main(void) { int t=0; int a,b; printf("please input (a,b):"); scanf("%d %d",&a,&b); t=Ackermann(a,b); printf("Ackermann:%d",t); return 0; }
##程序解析:
##输出结果:
#############################################################################
简单的阿克曼函数:
A (1,0) | 2 |
A (1,1) | 3 |
A (1,2) | 4 |
A (2,0) | 3 |
A (2,1) | 5 |
A (2,2) | 7 |
A (3,0) | 5 |
A (3,1) | 13 |
A (3,2) | 29 |
A (3,3) | 61 |
#############################################################################
【思维的有限边界性——阿克曼函数】
在上面我们举了A(1,2)这一个简单的数。但当你将这个数变大时,你就会发现计算机很慢才会输出结果或者不再会输出结果,比如A(4,3)这组数。这样超大一类的数早就超出了宇宙的范围,而对于大于 A(4,3) 这样的数,我认为这已经是超出了人类的思维计算极限。这样的数对我们的生活是没有多大意义的,甚至对于科学研究也是难见其意义的,所以我认为一般不对其进行深究,而对其进行一些简单的掌握即可。
##下面我引用一个比较经典的例子来证明这个无穷性: