2015-11-05 57 views
0
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的值,然后达到基本情况,但是如何在不运行代码的情况下获得输出对于给定的输入?递归函数 - 工作

+0

一个不错的[视频](https://www.youtube.com/watch?v=i7sm9dzFtEI)解释它。 – AntiHeadshot

+0

请添加语言标签。 – AndyG

+0

其实这个问题是关于函数的,它在任何语言中都是一样的。因此我没有添加语言标签。 –

回答

1

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

你是什么意思得到的输出没有运行给定的输入代码

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