2011-04-14 79 views
0

任何人都可以得到這個方程嗎?我不能Java難以置信的益智遊戲

class Calculator { 
    public int count = 0; 
public void calc(int n, int p) { 
    count++; 
     if (p>n) return; 
     for (int i=0; i<n; i++) { 
      calc(n, p+1); 
     } 
    } 
} 

// int n is input by keyboard 
Calculator c = new Calculator(); 
c.calc(n, 0); 
System.out.println(c.count); 

任何人與方程或任何資料...感謝

+6

我不明白你的問題。 – 2011-04-14 16:57:37

+3

什麼「等式」? – 2011-04-14 16:58:30

+1

當然看起來像家庭作業。提示:這是兩種不同的迭代方式。解決少數幾個問題。另外,這個等式是一個非常簡單的表達式。 – 2011-04-14 17:00:59

回答

2

count遞增一次,然後計算被稱爲n倍,這個遞歸由於p > n測試1 + n倍。順便說一句,如果它是p >= n它會遞減n次。

方程式是

1 + n * (1 + n * ... (1 + n)) 

其中表達式1 + n出現1 + n倍。

例如calc(3,0)= 121 =

1 + 3 * (1 + 3 * (1 + 3 * (1 + 3))) 
+0

這是對的,打我吧 – 2011-04-14 17:14:57

+0

@Richard,至少2秒。 ;) – 2011-04-14 17:15:19

0

我認爲這將調用

calc(n, 1); // this tree will appear n times 
    calc(n, 2); // this tree will appear n times 
    calc(n, 3) // this tree will appear n times 
     . 
     . 
     calc(n, n+1) // this call will appear n times 

calc每次調用將增加count。計算調用次數相當於計算高度爲n+2(該樹的根表示調用c.calc(n, 0))的完整n元樹的節點數。所以我認爲解決的辦法是

count = n^0 + n^1 + n^2 + ... + n^n + n^(n+1) 
+0

n = 3的計數是121,n = 4是1365. – 2011-04-14 17:26:00

+0

@Peter你是對的,我的計算節點數的計算公式是錯誤的:)現在是正確的。 – 2011-04-14 17:38:29