1

我在一次采访中被问到以下问题...

Compute the following sum:
1/2 + 1/4 + 1/8 + ... + 1/1048576    

有人告诉我这是一个逻辑问题,他们不是在寻找源代码,但是我的答案如下......

    private static double computeSum(){
        double x = 0.0;
        for(double i=2; i<=1048576; i*=2){
            x += (1 / i);
        }
        return x;         
    }

这个问题的正确逻辑答案是什么?

4

4 回答 4

11

我收到了这笔款项,我会说答案是1 minus the nth term,所以在你的情况下

1 - 1/1048576 = 1048575/1048576

我不会做任何数学或代码或任何事情。我想这就是他们正在寻找的答案。

1/2 + 1/4 = 3/4 = 1 - 1/4;我可能会通过说//在此处编辑来显示一些“工作”

1/2 + 1/4 + 1/8 = 7/8 = 1 - 1/8
于 2012-04-16T11:08:55.397 回答
3

总和:

1/2 + 1/4 + 1/8 + ... + 1/1048576

相当于:

(1 + 2 + ... 2 ^ 20) / (2 ^ 20) - 1 =
(2 ^ 21 - 1) / (2 ^ 20) - 1 =
2 - 1 / (2 ^ 20) - 1 =
1 - 1 / (2 ^ 20) ~= 0.99999

如果序列的长度增加,总和将趋于 1。

于 2012-04-16T11:07:55.747 回答
0

这是一个简单的convergent geometric series

  s=a+ar+ar^2+ar^3+... to infinity

所以总和是

s=1/(1-r) where in this case r =1/2

但是,我们正在寻找 sa,因为给定的系列从 1/2 开始,而不是从 1。因此

s-a = 1/(1-r) - a = 1/(1-1/2) -1 = 1.

为什么他们称之为logic问题对我来说并不清楚,除了他们可能想要解释为什么给定的几何级数收敛 - 这是一个简单的证明:即任何两个连续项之间的比率是小于 1 的常数。

于 2012-04-17T00:20:53.070 回答
0

他们将分数相加,直到得出一个分数 1/1048576,其值可以忽略不计。这意味着上面的答案将非常接近 1,但不完全是 1。

于 2012-04-16T11:11:16.380 回答