先看一下标准阿克曼函数的实现
akm(m, n) = n + 1; (m = 0时)
akm(m - 1, 1); (n = 0时)
akm(m - 1, akm(m, n - 1)); (m != 0且n != 0时)
int akm_nonrecursive(int m, int n)
{
int m1[50], n1[50], cp;
cp = 0;
m1[0] = m;
n1[0] = n;
do {
while (m1[cp] >; 0) { /* 压栈, 直到m1[cp] = 0 */
while (n1[cp] >; 0) { /* 压栈, 直到n1[cp] = 0 */
cp++;
m1[cp] = m1[cp - 1];
n1[cp] = n1[cp - 1] - 1;
}
/* 计算akm(m - 1, 1),当n = 0时 */
m1[cp] = m1[cp] - 1;
n1[cp] = 1;
}
/* 改栈顶为akm(m - 1, n + 1),当m = 0时 */
cp--;
m1[cp] = m1[cp] - 1;
n1[cp] = n1[cp + 1] + 1;
} while (cp >; 0 || m1[cp] >; 0);
return n1[0] + 1;
}
现在将阿克曼函数变化一下
补充为————注意看:将阿克曼函数稍稍变化:akm2(n,x,y)=
x+1; (n=0)
x; (n=1,y=0)
0; (n=2,y=0)
1; (n=3,y=0)
2; (n>3,y=0)
akm2(n-1,akm2(n,x,y-1),x) (n!=0,y!=0)
模拟上面问题中的算法 将新的函数的程序实现代码写出来
同样利用二叉树!!!!!!!!!!!!!!!!!!!!
+300分