数据结构(C语言版) 栈和队列 算法设计Demo9

Posted Aiden (winner)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 栈和队列 算法设计Demo9相关的知识,希望对你有一定的参考价值。

已知Ackermann函数定义如下:

① 写出计算Ack(m,n)的递归算法,并根据此算法给出出Ack(2,1)的计算过程。
② 写出计算Ack(m,n)的非递归算法。

[算法描述]

int Ack(int m,n)
	if(m==0)
	return(n+1);
    else if(m!=0&&n==0)
		return(Ack(m-1,1));
    else return(Ack(m-1,Ack(m,m-1)));
//算法结束
// ① Ack(2,1)的计算过程
Ack(2,1)= Ack(1,Ack(2,0))        //因m<>0,n<>0而得
	= Ack(1,Ack(1,1))            //因m<>0,n=0而得
	= Ack(1,Ack(0,Ack(1,0)))     // 因m<>0,n<>0而得
	= Ack(1,Ack(0,Ack(0,1)))     // 因m<>0,n=0而得
	= Ack(1,Ack(0,2))            // 因m=0而得
	= Ack(1,3)                   // 因m=0而得
	= Ack(0,Ack(1,2))            //因m<>0,n<>0而得
	= Ack(0,Ack(0,Ack(1,1)))     //因m<>0,n<>0而得
	= Ack(0,Ack(0,Ack(0,Ack(1,0)))) //因m<>0,n<>0而得
	= Ack(0,Ack(0,Ack(0,Ack(0,1)))) //因m<>0,n=0而得
	= Ack(0,Ack(0,Ack(0,2)))     //因m=0而得
	= Ack(0,Ack(0,3))            //因m=0而得
	= Ack(0,4)                   //因n=0而得
	=5                           //因n=0而得
// ②
int Ackerman(int m, int n)
	int akm[M][N];
	int i,j;
	for(j=0;j<N;j++)
		akm[0][j]=j+1;
	for(i=1;i<m;i++)
		akm[i][0]=akm[i-1][1];
		for(j=1;j<N;j++)
			akm[i][j]=akm[i-1][akm[i][j-1]];
	
	return(akm[m][n]);
//算法结束

以上是关于数据结构(C语言版) 栈和队列 算法设计Demo9的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(C语言版) 栈和队列 算法设计Demo14

数据结构(C语言版) 栈和队列 算法设计Demo8

数据结构(C语言版) 栈和队列 算法设计Demo13

数据结构(C语言版) 栈和队列 算法设计Demo10

数据结构(C语言版) 栈和队列 算法设计Demo12

数据结构(C语言版) 栈和队列 算法设计Demo11