2011-04-14 124 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