SICP练习1.8:实现立方根牛顿法的函数为何无法终止?
立方根牛顿法函数停滞的问题解决
你的代码陷入无限循环的核心问题出在good-enough?函数的终止判断条件上——你沿用了平方根的判断逻辑,用guess的平方和目标值x比较,但立方根的迭代终止应该判断guess的立方与x的差距是否足够小。
原代码中:
(define (good-enough? guess x) (< (abs (- (* guess guess) x)) 0.001))
这个条件对立方根计算完全不适用,比如计算8的立方根时,当guess趋近于2,guess²是4,和8的差值始终是4,远大于0.001,导致迭代永远无法满足终止条件,陷入死循环。
修改good-enough?函数为立方比较即可解决问题:
(define (good-enough? guess x) (< (abs (- (* guess guess guess) x)) 0.001))
其他部分的代码(迭代逻辑和improve函数)是正确的,修改后就能正常终止并输出正确的立方根结果。
内容的提问来源于stack exchange,提问作者Avrohom Yisroel
相关产品推荐
相关产品推荐

