既然已经知道了函数 \(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\) 的规律:
根据以上规律,可以写出完整的求 \(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