; ====================================================================== ; ; Structure and Interpretation of Computer Programs ; (trial answer to excercises) ; ; 计算机程序的构造和解释(习题试解) ; ; created: code17 03/05/05 ; modified: ; (保持内容完整不变前提下,可以任意转载) ; ======================================================================
;; SICP No.1.31
;; 递归版本 (define (product-r term a next b) (if (> a b) 1 (* (term a) (product-r term (next a) next b))))
;; 迭代版本 (define (product-i term a next b) (define (iter a result) (if (> a b) result (iter (next a) (* result (term a))))) (iter a 1))
;; 阶乘 (define (factorial n) (define (term i) i) (define (next i) (+ i 1)) (product-i term 1 next n))
;; 求pi (define (john-wallis-pi n) (define (term i) (/ (* (* 2 i) (* 2 (+ i 1))) (square (+ 1 (* 2 i))))) (define (next i) (+ i 1)) (* (product-i term 1 next n) 4.0))
;; Test-it: ;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc. ;; > (factorial 5) ;; 120 ;; > (factorial 10) ;; 3628800 ;; > (john-wallis-pi 10) ;; 3.2137849402931895 ;; > (john-wallis-pi 100) ;; 3.1493784731686008 ;; > (john-wallis-pi 1000) ;; 3.142377365093878 ;; > (john-wallis-pi 10000) ;; 3.1416711865344635 ;; > (john-wallis-pi 100000) ;; 3.1416005075027056

|