
Ackerman 函数。并非一切递归函数都能用非递归方式定义。为了对递归函数的复杂性有更多的了解,我们再介绍双递归函数-Ackerman 函数。当一个函数及它的一个变量由函数自身定义时,称这个函数是双递归函数。Ackerman 函数 A(n,m)有两个独立的整型变量m≥0 和n≥0,其定义如下:

数学归纳法证明哈克曼函数算法复杂度:
A(n,m)的自变量m 的每个值都定义了一个单变量函数。例如,递归式的第了式表示 m=0
定义了函数“加2”。
当m-1 时,由于A(1,1)=A(A(0,1),0)=A(1,0)=2,以及 A(n, 1)=A(A(n-1,1), 0)-A(n-1,1)+2
(n>1),因此A(n,1)=2n(n≥1),即A(n,1)是函数“乘2”。
A(n,2)=21
当m=-2 时,40,2)=464(2-1,2),1)=24(0-1,2), 4(1,2)=4(4(0,2), 1)=4(1,1)=2,故
类似地可以推出,4((2,3)=222
其中2的层数为 n.
4(n,4)的增长速度非常快,以至于没有适当的数学式子来表示这一函数
单变量的 Ackerman 两数 A(n)定义为 4(n=4(n,n)。其拟逆西数a(n)在算法复杂性分析中
会遇到。它定义为:a(n=min fRA()三吗),即a(n是使n≤AC成立的最小的人值。
例如,由 40=1,41=2,4(2)=4 和 4(3)=16推知,a(1)=0,c(2)=1,c(3)=a(4)-2 和 a(5)=
=Q(16)=3。可以看出,a(n)的增长速度非常慢。
4④=222
〈其中2的层数为 65536)的值非常大,无法用通常的方式水表达它。如果要
写出这个数将需要 10g(4(4)位,即22°
65535层2的方幂)位。所以,对于通常见到的正
整数n,我们有cn≤4。但在理论上,a(n)没有上界,随着n的增加,它以难以想象的速度
趋向正无穷大。