递归函数 - 工作

时间:2015-11-05 15:33:26

标签: recursion

public class Temp{
static int add(int m,int n){
    if(m==0)
        return n+1;
    else if(n==0)
        return add(m-1,1);
    else
        return add(m-1,add(m,n-1));
}
public static void main(String[] a){
    System.out.println(add(3,3));
}
}

我无法理解这个功能的实现。 (2,2)的输出是7,而(3,3)的输出是61.我知道n的值减小m的值然后达到基本情况但是如何在不运行代码的情况下获得输出对于给定的输入?

1 个答案:

答案 0 :(得分:1)

这是Ackermann函数(https://en.wikipedia.org/wiki/Ackermann_function),是非原始递归函数的一个例子。

在没有运行给定输入的代码的情况下获取输出是什么意思

如果您希望计算给定值,我建议您使用HashMap作为缓存,以便您可以重用已计算的值。另外,如果您使用大于3的BigInteger值,我认为您最好使用m值。

相关问题