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]);
}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值