より多くの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で.7blahblah blahを取得する代わりに、.5blahblah何かを取得しています。理由がわかりません。「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)))