Avr*_*oel 1 scheme sicp racket
我正在尝试实现立方根的牛顿法,但我的函数似乎挂起。我的代码与书中显示的平方根代码几乎相同,并根据improve需要修改了函数。
这是我的代码...
(define (cube-root x)
(cube-root-iter 1.0 x))
(define (cube-root-iter guess x)
(if (good-enough? guess x)
guess
(cube-root-iter (improve x guess) x)
)
)
(define (good-enough? guess x)
(< (abs (- (* guess guess) x)) 0.001))
(define (improve x guess)
(/ (+ (/ x (* guess guess)) (* 2 guess)) 3)
)
Run Code Online (Sandbox Code Playgroud)
我进行了独立测试improve,good-enough?他们似乎给出了正确的答案。有人知道为什么我的代码不终止吗?
我在 Racket 中对sicp包进行此操作,以防产生任何影响。
您想要计算立方根。根据定义,的立方根x表示 的值。您尝试使用 进行近似,但您仅进行计算。需要乘以3倍:yy*y*y = xyguessy^2
(define (good-enough? guess x)
(< (abs (- (* guess guess guess) x))
0.001))
Run Code Online (Sandbox Code Playgroud)
如果你只乘以 2 次,y^2永远不会足够接近y^3,而它会更接近x。如果您尝试使用代码计算立方根,1它0可能会起作用(并且仅对于这些输入它可能起作用)。