SICP练习记录

时间:2023-03-09 03:02:37
SICP练习记录

-------------求一个数的平方根(牛顿法平方根求解法):

 (define (sqrt-iter guess x)
   (if (good-enough? guess x)
       guess
       (sqrt-iter (improve guess x)
                  x)))
 (define (improve guess x)
   (average guess (/ x guess)))
 (define (average x y)
   (/ (+ x y) 2))
 (define (good-enough? guess x)
   (< (abs(- (square guess) x)) 0.001))
 (define (square x)
   (* x x))
 (define (sqrt x)
   (sqrt-iter 1.0 x))

最终通过调用sqrt(x)可求的比较接近的平方根数。

这里主要应用了递归的思想,有一个初始值,程序朝着限定值方向运行,知道达到符合要求的情况。


下面过程与计算中 线型递归与线型迭代的发生:

 (define (factorial n)
   ()

       (* n (factorial (- n )))))
 
//迭代方式,先进行每步的运算,对于该式只需保存需要用到的三个参数值即可,不用保存其它数据 (define (factory n) (factorial-iter n)) (define (factorial-iter counter total n) (if (<= counter n) total (factorial-iter (+ counter ) (* counter total) n)))