例2.3 Ackerman函数双递归实现

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的增加,它以难以想象的速度

趋向正无穷大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值