SICP問題1.37
再帰的プロセスの cont-frac
(define (cont-frac fn fd k) (define (recursive-frac i) (let ((n (fn i)) (d (fd i))) (if (= i k) (/ n d) (/ n (+ d (recursive-frac (+ i 1))))))) (recursive-frac 1) )
4桁の精度の近似を得るのにどれくらいの大きさが必要か実験
(cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 2) ; 0.5 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 3) ; 0.6666666666666666 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 4) ; 0.6000000000000001 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 5) ; 0.625 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 6) ; 0.6153846153846154 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 7) ; 0.6190476190476191 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 8) ; 0.6176470588235294 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 9) ; 0.6181818181818182 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 10) ; 0.6179775280898876 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 11) ; 0.6180555555555556 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 12) ; 0.6180257510729613 (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) 13) ; 0.6180371352785146
10以上は必要そう。
反復的プロセスのcont-frac
(define (cont-frac fn fd k) (define (iter-frac i result) (let ((n (fn i)) (d (fd i))) (if (= i 0) result (iter-frac (- i 1) (/ n (+ d result)))))) (iter-frac k 0) )