计算机程序的构造和解释 练习题1.38

Di依次为1、2、1、1、4、1、1、6、1、1、8、。。。,当i每隔3个是个偶数递增,我们得到Di的公式
D i = ( i + 1 ) / 3 2          ( ( i + 1 ) % 3 = 0 ) D i = 1          ( ( i + 1 ) % 3 0 ) D_i = (i+1)/3*2\ \ \ \ \ \ \ \ (当(i+1)\%3=0)\\ D_i =1\ \ \ \ \ \ \ \ (当(i+1)\%3\neq0)\\
然后写出di的过程

(lambda (i)
   (if (= (remainder (+ i 1) 3) 0 ) (* (/ (+ i 1) 3) 2) 1))

整理得出完整过程

#lang racket

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

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

(cal-e 100)

运行结果为e的近似值

2.7182818284590455
发布了27 篇原创文章 · 获赞 1 · 访问量 466

猜你喜欢

转载自blog.csdn.net/holybird0213/article/details/104866169