日期:2014-05-20  浏览次数:20927 次

问一个关于ackermann函数的递归解决方案问题.
算法定义:

A(1, j) =2的j次方 j>=1

A( i, 1) = A(i-1,2) j>=2

A(i,j) = A(i-1,A(i, j-1)) i,j>=2

要求设计ackermann(int m,int n)使用递归实现该算法

我写的算法在算A(3,2)的时候出现了java.lang.StackOverflowError错误,应该是不正确的.为了避免误导大家所以我没有贴上来.
 
a(1,1) = 2
a(2,1) = 4
a(1,2) = 4
a(2,2) = 16
a(2,3) = 65536
a(3,2) = ??
.....

哪位递归达人能帮忙解决一下啊?谢谢,每段代码我都会运行都会试.谢谢


------解决方案--------------------
探讨
对对对...我也是类似这么写的..咱俩前几个值算的都一样..
我也在网上查了,对于阿克曼函数来说,貌似是有不同的定义.
但是,我始终没有敢怀疑书上的定义有问题.呵呵

另一种定义是这样的.
A(1,0) = 2
A(0,m) = 1 m>=0
A(n,0) = n + 2 n>=2
A(n,m) = A(A(n-1,m),m-1) n,m >= 1

Java code
public static long ackermann(long m, long n) {
if(m==0) {
if(n==0) {
return 1…