练习 1.38

既然已经知道了函数 \(N\) 的定义,那么这道题的关键就是找出函数 \(D\) 生成数值序列的模式了。

分析书中给出的 \(D_i\) 生成的序列:

i 1 2 3 4 5 6 7 8 9 10 11 ...
\(D_i\) 1 2 1 1 4 1 1 6 1 1 8 ...

观察以上序列,可以发现函数 \(D_i\) 的规律:

  • \((i + 1)\) 取模 \(3\) 等于 \(0\) 时, \(D_i\) 等于 \((i + 1) / 3 * 2\)
  • 其他情况下, \(D_i\) 返回 \(1\)

根据以上规律,可以写出完整的求 \(e\) 函数了:

;;; 38-e.scm

(load "37-iter-cont-frac.scm")

(define (e k)

    (define (N i)
        1)

    (define (D i)
        (if (= 0 (remainder (+ i 1) 3))
            (* 2 (/ (+ i 1) 3))
            1))

    (+ 2.0 
       (cont-frac N D k)))

测试:

1 ]=> (load "38-e.scm")

;Loading "38-e.scm"...
;  Loading "37-iter-cont-frac.scm"... done
;... done
;Value: e

1 ]=> (e 1)

;Value: 3.

1 ]=> (e 2)

;Value: 2.6666666666666665

1 ]=> (e 3)

;Value: 2.75

1 ]=> (e 4)

;Value: 2.7142857142857144

1 ]=> (e 5)

;Value: 2.71875

1 ]=> (e 10)

;Value: 2.7182817182817183

1 ]=> (e 100)

;Value: 2.718281828459045

讨论

blog comments powered by Disqus