2013-12-16 31 views
-7

//如果我在測試儀(7,2)的代碼返回21過去了,但我不知道如何或爲何有人可以分解這個遞歸函數的工作原理嗎?

public static int tester(int n, int r){ 
    if(r==0) return 1; 
    if(r==1) return n; 
    if(r==n) return 1; 
    return tester(n-1, r-1) + tester(n-1, r); 
} 
+3

嘗試用筆和紙做出來。也許你會找到答案! – devnull

+0

我試過但我沒有通過,例如我知道部分 返回測試儀(n-1,r-1)會去 返回測試儀(6,1),然後 返回6.但我有麻煩添加return語句的另一部分並獲得相同的答案。 – Cody

回答

0

這將有助於.....

public static void main(String... args) { 
    System.out.println(tester(7, 2)); 
} 

public static int tester(int n, int r) { 
    if (r == 0) { 
     System.out.println("r : 0.... Returning 1"); 
     return 1; 
    } 
    if (r == 1) { 
     System.out.println("r : 1 ... Returning " + n); 
     return n; 
    } 
    if (r == n) { 
     System.out.println("r :" + n + ".. Returning 1"); 
     return 1; 
    } 
    int temp = n - 1; 
    int temp2 = r - 1; 
    System.out.println("Calling tester(" + temp + "," + temp2 + ")"); 
    return tester(n - 1, r - 1) + tester(n - 1, r); 

} 

Ø/P:

Calling tester(6,1) 
r : 1 ... Returning 6 
Calling tester(5,1) 
r : 1 ... Returning 5 
Calling tester(4,1) 
r : 1 ... Returning 4 
Calling tester(3,1) 
r : 1 ... Returning 3 
Calling tester(2,1) 
r : 1 ... Returning 2 
r :2.. Returning 1 
21 
0
tester(int n, int r) -> (n,r) 
(7,2) -> (6,1)+(6,2) -> 
6+(5,1)+(5,2) -> 
6+ 5+(4,1)+(4,2) -> 
...-> 
6+5+4+3+(2,1)+(2,2) -> 
6+5+4+3+2+(2,2) -> 
6+5+4+3+2+1 = 21 

tester(n, 2) = n(n-1)/2 

這是關於數學

相關問題