先贴一个连接,这是一个好心的博主汉化的SICP课程,文章首部先感谢他
思路
- 为了求到平方根我们需要先设置一个猜想值,在这里猜想值暂定为1 (其实可以随机设)
- 我们不断地通过修正这个猜想值去逼近真实值
- 修正方法为,对猜想值和我们的输入参数取除(也就是用A/(GUESS^2)^1/2)并对这个输出值和我们的猜测值取平均值
- 即Improve the Guess by averaging Guess and X/Guess
(讲得不是很清楚…直接上实现代码吧)
代码
#lang racket
( define ( mean x y) (/(+ x y) 2 ))
( define ( abs x )(cond (( > x 0 ) x)
(( < x 0 ) (- x))
(( = x 0 ) 0 )))
( define (sqr z g)
( cond ( ( > (abs ( - g ( / z g) ) ) 0.001) (sqr z (mean (/ z g) g)))
( ( < (abs ( - g ( / z g ) ) ) 0.001 ) g )
( ( = (abs ( - g ( / z g ) ) ) 0.001 ) g )))
调用方法
(sqr 2 1)
输出结果
1 169/408
也就是1.41421,精度是0.001