首页 > 代码库 > SICP 1.29 1.30
SICP 1.29 1.30
解:代码如下
(define (sum term a next b) (if (> a b) 0 (+ (term a) (sum term (next a) next b)))) (define (add-1 x) (+ x 1)) (define (sum-iter term a next b) (define (iter a result) (if (> a b) result (iter (next a) (+ result (term a))))) (iter a 0)) (define (integral f a b n) (define h (/ (- b a) (* 1.0 n))) (define (function-y k) (f (+ a (* k h)))) (define (term k) (define y (function-y k)) (cond ((= k 0) y) ((= k n) y) ((even? k) (* 2 y)) (else (* 4 y)))) (* (/ h 3) (sum-iter term 0 add-1 n))) (define (cube x) (* x x x))
1.29的难点是找出状态转移变量,也就是k;要注意的时k=0和k=n时,y函数前面是没有2或4的。
当n=1000时,用sum求出的是0.25000000000000003,而用sum-iter求出的是0.25000000000000006,用DrRacket,不知道为什么。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。