为什么哔哔声不是我的连续分数接近正确?

时间:2010-10-06 04:18:11

标签: algorithm math scheme sicp continued-fractions

阅读更多SICP,我坚持exercise 1.3.8。我的代码适用于近似1 / phi,但不适用于近似e - 2.

(define (cont-frac n d k)
  (define (frac n d k)
        (if (= k 0)
            1.0
            (+ (d k) (/ (n (+ k 1)) (frac n d (- k 1))))))
    (/ (n 1) (frac n d k)))

(define (eulers-e-2)
  (cont-frac (lambda (i) 1.0) 
             (lambda (i)
               (if (= (remainder (+ i 1) 3) 0)
                   (* 2.0 (/ (+ i 1) 3))
                   1.0))
             100))

(define (1-over-phi)
  (cont-frac (lambda (i) 1.0)
             (lambda (i) 1.0)
             100))
对于e-2而言,我没有得到.7等等等等。我无法弄清楚为什么。我很确定我在“eulers-e-2”功能中正确定义了“d”。

编辑: 谢谢你们,我正在向后计算它。这是固定代码。

(define (cont-frac n d k)
  (define (frac n d i)
        (if (= k i)
            (d i)
            (+ (d i) (/ (n (+ i 1)) (frac n d (+ i 1))))))
    (/ (n 1) (frac n d 1)))

1 个答案:

答案 0 :(得分:3)

您好像在计算以下内容:

N1/(D100 + (N101/ D99 + N100/(D98 + N99/(..))))

而不是

N1/(D1 + N2/(D2 + ...))

由于N / D与1 / phi相同(全1),因此您可以得到正确答案。