2015-11-05 55 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值。