找出递归函数的模式

时间:2014-10-08 19:26:31

标签: algorithm design-patterns recursion

我很难理解这段代码的模式。我测试了这个函数,我知道输入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));
}

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