Java不可能的益智游戏

时间:2011-04-14 16:55:54

标签: java puzzle

任何人都可以得到这个等式吗?我不能

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);

任何有等式或任何信息的人?

2 个答案:

答案 0 :(得分:2)

count递增一次然后计算称为n次,由于1 + n测试,这会递归p > n次。顺便说一句,如果它是p >= n,它会递归n次。

等式是

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

表达式1 + n出现1 + n次。

e.g。 calc(3,0)= 121 =

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

答案 1 :(得分: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的完整n元树的节点数(此树的根表示调用c.calc(n, 0))。所以我认为解决方案是

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