SICP习题解答1.9-1.19
来源:互联网 发布:macbookpro卸载软件 编辑:程序博客网 时间:2024/05/18 02:15
ex1.9-1.10
#lang racket; exercise 1.9;; 第一个是递归计算过程,第二个是迭代计算过程; exercise 1.10(define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1))))));; > (A 1 10);; 1024;; > (A 2 4);; 65536;; > (A 3 3);; 65536;; >(define (f n) (A 0 n)) ;; 2n(define (g n) (A 1 n)) ;; 2^n(define (h n) (A 2 n)) ;; 2^2..^2 (以2为底,做n次平方)
ex1.11-1.12
#lang racket; exercise 1.11;; 递归(define (f-rec n) (if (< n 3) n (+ (f-rec (- n 1)) (* 2 (f-rec (- n 2))) (* 3 (f-rec (- n 3))))));; 迭代(define (f-iter n) (if (< n 3) n (f-it 2 1 0 n)))(define (f-it a b c n) (if (< n 3) a (f-it (+ a (* 2 b) (* 3 c)) a b (- n 1)))); exercise 1.12(define (YangHui-triangle row col) (cond ((or (= col 0) (= row col)) 1) (else (+ (YangHui-triangle (- row 1) col) (YangHui-triangle (- row 1) (- col 1))))))
ex1.14-1.9
#lang racket; exercise 1.14;; 空间O(n^2) 时间O(a^n) (a是硬币种数,n是输入值); exercise 1.15;; a) p调用5次 (p (p (p (p (p (sine 0.05))))));; b) 空间和步数为对数级别:ceil(log3(10a)); exercise 1.16(define (fast-expt b n) (if (= n 0) 1 (iter b n 1)))(define (iter b n k) (cond ((= n 1) (* b k)) ((even? n) (iter (* b b) (/ n 2) k)) (else (iter (* b b) (/ (- n 1) 2) (* k b)))))(define (even? n) (= (remainder n 2) 0)); exercise 1.17(define (double n) (+ n n))(define (halve n) (/ n 2))(define (fast-rec-* a b) (cond ((= b 0) 0) ((even? b) (double (fast-rec-* a (halve b)))) (else (+ a (fast-rec-* a (- b 1)))))); exercise 1.18(define (fast-* a b) (fast-*-iter a b 0))(define (fast-*-iter a b k) (cond ((= b 0) k) ((even? b) (fast-*-iter (double a) (halve b) k)) (else (fast-*-iter a (- b 1) (+ a k))))); exercise 1.19(define (fib n) (fib-iter 1 0 0 1 n)) (define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (+ (square p) (square q)) ;; p'=p^2+q^2 q'=q^2+2pq 可以推导出来 (+ (* 2 p q) (square q)) (/ count 2))) (else (fib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1))))) (define (square x) (* x x))