3.9 Ackermann 함수의 재귀 및 비 재귀 알고리즘

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