例子:求2的平方根
Guess | Quotient | Average |
?? | ||
1 | (2/1) = 2 | ((2 + 1)/2) = 1.5 |
?? | ||
1.5 | (2/1.5) = 1.3333 | ((1.3333 + 1.5)/2) = 1.4167 |
?? | ||
1.4167 | (2/1.4167) = 1.4118 | ((1.4167 + 1.4118)/2) = 1.4142 |
?? | ||
1.4142 | ... | ... |
一.給出一個scheme的過程
(define?(sqrt-iter?guess?x)
??(if?(good-enough??guess?x)
??????guess
??????(sqrt-iter?(improve?guess?x)
?????????????????x)))
二.改進猜的數(x除以猜的數和猜的數的平均值
??? (define?(average?x?y)
? ??? (/?(+?x?y)?2))
??? (define?(improve?guess?x)
? ??? (average?guess?(/?x?guess)))
三.如何得到比較適合的值.這里做了一個假設,猜的值的平方減去x不小于0.001
??? (define?(good-enough??guess?x)
? ??? (<?(abs?(-?(square?guess)?x))?0.001))
注:如何用內部過程來使用上面的部分:
(define (sqrt x)
? (define (good-enough? guess)
??? (define (square)
????? (* guess guess))
??? (< (abs (- (square) x)) 0.001))
? (define (improve guess)
??? (define (average y)
????? (/ (+ guess y)
??? ?2))
??? (average (/ x guess)))
? (define (sqrt-iter guess)
??? (if (good-enough? guess)
??? guess
??? (sqrt-iter (improve guess))))
? (sqrt-iter 1.0))