3.9Ackermann函数的递归算法和非递归算法

已知Ackermann函数定义如下:
在这里插入图片描述

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

①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,n-1));
}

/*
  Ack(2,1)的计算过程
*/
Ack(2,1)=Ack(1,Ack(2,0))
		=Ack(1,Ack(1,1))
		=Ack(1,Ack(0,Ack(1,0)))
		=Ack(1,Ack(0,Ack(0,1)))
		=Ack(1,Ack(0,2))
		=Ack(1,3)
		=Ack(0,Ack(1,2))
		=Ack(0,Ack(0,Ack(1,1)))
		=Ack(0,Ack(0,Ack(0,Ack(1,0))))
		=Ack(0,Ack(0,Ack(0,Ack(0,1))))
		=Ack(0,Ack(0,Ack(0,2)))
		=Ack(0,Ack(0,3))
		=Ack(0,4)
		=5

②Ack(m,n)的非递归算法

/*
  Ack(m,n)的非递归算法
*/
int Ack(int m,int n){
    
    
	int a[M][N];
	int i,j;
	for(j=0;j<N;j++){
    
    
		a[0][j]=j+1;
	}
	for(i=1;i<m;i++){
    
    
		for(j=1;j<N;j++){
    
    
			a[i][j]=a[i-1][a[i][j-1]];
		}
	}
	return(a[m][n]);
}

猜你喜欢

转载自blog.csdn.net/qq_39688282/article/details/108286224