关于Ackermann函数的计算方法

这篇博客探讨了一种新的 Ackermann 函数计算方法,该方法显著降低了空间复杂度,仅需O(m)的空间即可完成计算。
摘要由CSDN通过智能技术生成
//带备忘的二维辅助空间计算Ackermann
int Ackermann(m,   n)   {
  1.   if   A[m,n]   >=   0     
  2.         then   return   A[m,   n];   
  3.   else   if   m   =   0   and   n   >   0   
  4.         then   A[m,n]   <-   n   +   1;   
  5.   else   if   n   =   0   and   m   >   0   
  6.         then   A[m,n]   <-   Ackermann(m-1,   1);   
  7.   else   if   n   >   0   and   m   >   0   
  8.         then   A[m,n]   <-   Ackermann(m-1,   Ackermann(m,   n-1));   
  9.   return   A[m,   n];
}


还有一个方法只需要用到O(m)的空间复杂度

int computeACK(int m, int n) {
	if(m<0||n<0) return -1;	
	if(m==0) return n+1;
	int* val = new int[n+1];
	int* ind = new int[n+1];
	for(int i = 0; i <= n; i++) val[i] = ind[i] = -1;
	val[0] = 1; 
	ind[0] = 0;
	while(ind[m]<n) {
		val[0]++;
		ind[0]++;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值