/*本程序用堆栈思想实现AckermannFunction函数功能*/
/*编者:Lgw*/
/*专业:04计本二*/
/*日期:07/3/13*/
#include<iostream.h>
/*函数声名*/
int AckermannFunction(int m, int n);
/*主函数*/
void main()
{
int a =AckermannFunction(2,3);/*调试数据*/
cout<<"AckermannFunction(2,3)="<<a<<endl;/*打印过程*/
}
/*-------------------------------------------------------------*/
/*函数的功能:计算AckermannFunction函数*/
/*函数返回值:函数的值(整型数)*/
/*函数参数 第一个:函数的 m(整型数)*/
/*函数参数 第二个:函数的 n(整型数)*/
/*-------------------------------------------------------------*/
int AckermannFunction(int m, int n)
{
int a[100] ;/*数组"栈"++++看情况可以加大数组元素*/
a[0]=m;/*初使化*/
a[1]=n;/*初使化*/
int i=1;/*栈指针*/
while(i!=0)
{
if(a[i-1]==0)/*第一种情况*/
{ /*A(m,n)=n+1 当m=0*/
a[i-1]=a[i]+1;
i--;/*出栈*/
}
else if(a[i]==0)/*第二种情况*/
{ /*A(m,n)=A(m-1,1)*/
a[i]=1;
a[i-1]=a[i-1]-1;
}
else
{
int temp=a[i];/*第三种情况 A(m, n)=A(m-1,A(m,n-1))*/
a[i]=a[i-1];
a[i-1]=a[i-1]-1;
i++;
a[i]=temp-1;
}
for(int k=0;k<=i;k++)/*输出运算过程*/
cout<<a[k]<<" ";
cout<<endl;
}
return a[0];
}