我很难理解这段代码的模式。我测试了这个函数,我知道输入Ack(3,2)这个函数循环541次,所以它必须有一个模式来解决这个问题。请帮我找到模式。
public static int Ack(int m,int n)
{
if (n < 0 || m < 0) return 0;
else if (m == 0) return n + 1;
else if (n == 0) return Ack(m - 1, 1);
else return Ack(m-1,Ack(m,n-1));
}
答案 0 :(得分:0)
这是一些计算相同内容的非递归python代码(注意它需要类似堆栈的数据结构):
def ack(m,n):
if n < 0 or m < 0:
return 0
next_m = []
while m != 0 or (m==0 and next_m!=[]):
if (m==0 and next_m!=[]):
m = next_m.pop()
n = n+1
continue
if n==0:
m = m-1
n = 1
else:
n = n-1
next_m.append(m-1)
return n+1