SICP 1.11-1.13

1.11

递归版本

 1 (define (f n) (cond ((< n 3) n)
 2                     (else (+ (f (- n 1))
 3                              (* (f (- n 2)) 2)
 4                              (* (f (- n 3)) 2)))))
 5 
 6 迭代版本
 7 
 8 (define (f n)
 9   (if (< n 3)
10       3
11       (xf n 1 2 3 3)))
12 
13 
14 (define (xf n a b c d)
15   (cond ((= n d) (max a b c))
16         (else (cond ((= 0 (remainder d 3)) (xf n (+ (* 3 a)
17                                               (* 2 b)
18                                               c) b c (+ 1 d)))
19               ((= 1 (remainder d 3)) (xf n a (+ (* 3 b)
20                                                 (* 2 c)
21                                                 a) c (+ 1 d)))
22               ((= 2 (remainder d 3)) (xf n a b (+ (* 3 c)
23                                                   (* 2 a)
24                                                   b) (+ 1 d)))))))


1.12

1 (define (pascal h n)
2   (cond ((= h 1) 1)
3         ((= n 1) 1)
4         ((= h n) 1)
5         (else (+ (pascal (- h 1) n)
6                  (pascal (- h 1) (- n 1))))))



1.13
证明题看着都烦...
作为补偿我来实现一下1.12的迭代版本 --------> 失败

经过百度发现了一个公式  ------->   (row col)=row!/(col!⋅(row−col)!)   -----> 有这个公式的话那实现起来很简单,就不演示了...

原文地址:https://www.cnblogs.com/nzhl/p/5450367.html