《怎样解题:数学竞赛攻关宝典(第3版)》第 57 页:


令 bn = 2nan,则 b1 = 2 且

我们已经得到了数列 { bn } 的递推公式,它也可以写成以下形式:

目前还看不出这个数列的极限是什么。我准备写个程序来计算这个数列的前几项的近似值。为了避免两个相近的浮点数相减,进行分子有理化:

以下 C 语言程序计算数列 { an } 和 { bn } 的前几项的近似值:

#include <stdio.h>
#include <math.h>

int main(void)
{
  long double a = 1, b = 2, c = 2;
  for (int i = 1; i <= 35; i++, c *= 2) {
    printf("%2d %.18Lf %.18Lf\n", i, a, b);
    a = sqrtl(0.5*(1-sqrtl(1-a*a)));
    b = 2*sqrtl(c)*b/(sqrtl(c+b)+sqrtl(c-b));
  }
}

运行结果如下(各栏依次为 n、an 和 bn):

 1 1.000000000000000000 2.000000000000000000
 2 0.707106781186547524 2.828427124746190098
 3 0.382683432365089772 3.061467458920718174
 4 0.195090322016128268 3.121445152258052285
 5 0.098017140329560602 3.136548490545939263
 6 0.049067674327418014 3.140331156954752912
 7 0.024541228522912288 3.141277250932772868
 8 0.012271538285719926 3.141513801144301076
 9 0.006135884649154477 3.141572940367091384
10 0.003067956762965977 3.141587725277159700
11 0.001533980186284767 3.141591421511199973
12 0.000766990318742703 3.141592345570117742
13 0.000383495187571406 3.141592576584872665
14 0.000191747597310712 3.141592634338562988
15 0.000095873799095969 3.141592648776985669
16 0.000047936899602973 3.141592652386591345
17 0.000023968449808130 3.141592653288992764
18 0.000011984224904348 3.141592653514593119
19 0.000005992112452739 3.141592653570993208
20 0.000002996056227501 3.141592653585093230
21 0.000001498028118274 3.141592653588618235
22 0.000000749014063660 3.141592653589499487
23 0.000000374507022783 3.141592653589719799
24 0.000000187253529485 3.141592653589774877
25 0.000000093626728555 3.141592653589788647
26 0.000000046813436653 3.141592653589792089
27 0.000000023406718326 3.141592653589792950
28 0.000000011703069659 3.141592653589793165
29 0.000000005850955785 3.141592653589793219
30 0.000000002926635810 3.141592653589793232
31 0.000000001463317905 3.141592653589793236
32 0.000000000736275143 3.141592653589793237
33 0.000000000368137572 3.141592653589793237
34 0.000000000164636127 3.141592653589793237
35 0.000000000000000000 3.141592653589793237

可以看出,数列 { bn } 的极限是 π,也就是说这题的答案是 π。


但是,如何证明这一点?

根据 TeddyZ 的评论,当 0 ≤ x ≤ π/2 时,我们有:

令 an = sin(y/2n),则:

由 a1 = 1 可知 y = π,即 an = sin(π/2n),我们有:

注:在上式中令 π/2n = z,则 2n = π/z。