質問

より多くのSICPを読んで、私は立ち往生しています 演習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 Blah Blah Blahを取得する代わりに、私は.5 Blah Blahを取得しています。理由がわからない。 「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)))
役に立ちましたか?

解決

あなたは次のことを計算しているようです:

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

それ以外の

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

NとDは1/PHIで同じ(すべて1S)であるため、そこで正しい答えが得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top