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

将sum过程变成线性迭代

(define (sum term a next b)
  (define (iter a result)
  (if (> a b)
      result
      (iter (next a) (+ result (term a)))))
    (iter a 0))

完整的代码如下:

#lang racket

(define (sum term a next b)
  (define (iter a result)
  (if (> a b)
      result
      (iter (next a) (+ result (term a)))))
    (iter a 0))

(define (inc n) (+ n 1))
(define (cube n) (* n n n))

(define (simpson-inregral f a b n)
  (let ((h (/ (- b a) n)))
    (define (simpson-term k)
      (* (cond ((or (= k 0) (= k n)) 1)
               ((even? k) 2 )
               (else 4 )) (f (+ a (* k h)))))
      (if (odd? n) (simpson-inregral f a b (+ n 1)) (/ (* (sum simpson-term 0 inc n) h) 3.0))))

(simpson-inregral cube 0 1 1000)
(simpson-inregral cube 0 1 10)

运行结果

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

猜你喜欢

转载自blog.csdn.net/holybird0213/article/details/104782680
今日推荐