题目:已知Ackerman函数的定义如下:
(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
转换为非递归算法时,需要递归工作栈的辅助,利用其“先进后出”的特性,逐层计算