这题直接将相应的 \(N\) 函数和 \(D\) 函数给出就行了。
其中, \(N_i\) 只有当 \(i\) 为 \(1\) 时返回 \(x\) ,其他情况下都返回 \(-(x^2)\) (因为连分式内 \(D_i\) 进行的是减法操作)。
\(D_i\) 则返回 \(i\) 所指定的位置的奇数,也即是,当 \(i\) 为 \(1\) 时,返回第一个奇数 \(1\) , \(i\) 为 \(2\) 时,返回第二个奇数 \(3\) ,以此类推。
;;; 39-tan-cf.scm
(load "37-iter-cont-frac.scm")
(define (tan-cf x k)
(define (N i)
(if (= i 1)
x
(- (square x))))
(define (D i)
(- (* i 2) 1))
(exact->inexact (cont-frac N D k)))
可以使用 MIT Scheme 内置的 tan 函数和 tan-cf
进行对比测试,验证 tan-cf
的正确性:
1 ]=> (load "39-tan-cf.scm")
;Loading "39-tan-cf.scm"...
; Loading "37-iter-cont-frac.scm"... done
;... done
;Value: tan-cf
1 ]=> (tan 10)
;Value: .6483608274590866
1 ]=> (tan-cf 10 100)
;Value: .6483608274590866
1 ]=> (tan 25)
;Value: -.13352640702153587
1 ]=> (tan-cf 25 100)
;Value: -.13352640702153587