【数据结构】栈与递归例题:Ackerman函数

题目:已知Ackerman函数的定义如下:

akm= \begin{cases} n+1 & m=0\\ akm(m-1,1) & m\ne0,n=0\\ akm(m-1,akm(m,n-1)) & m\ne0,n\ne0\\ \end{cases}

 (1)写出递归算法;

(2)写出非递归算法;

(3)根据递归算法,画出求akm(2,1)时栈的变化过程。


部分概念

递归函数:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数。

递归工作栈:整个递归函数运行期间使用的数据存储区,每一层递归信息构成一个“工作记录”。当前执行层的工作记录必为递归工作栈栈顶,此记录称为“活动记录”,指示该记录的栈顶指针称为”当前环境指针“


递归直接按函数定义,if else语句分类执行。

递归算法如下:

int akm(int m, int n)
{
 if (m==0) akm=n+1;
 else if (n==0) akm=akm(m-1,1);
 else{
 	g=akm(m,n-1);
 	akm=akm(m-1,g);
 }
}//akm

转换为非递归算法时,需要递归工作栈的辅助,利用其“先进后出”的特性,逐层计算

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值