练习1.6
应用序会对
(define (sqrt-iter guess x)
(new-if (good-enough guess x)
guess
(sqrt-iter (improve guess x) x)))
的new-if中的else-clause(即(sqrt-iter (improve guess x) x))进行展开,而sqrt-iter使用了递归,因此将进入死循环
练习1.7
在被求值的数很小或很大时,因为变化程度很小会导致程序进入死循环
修改后的程序如下:
- (define (square x)
- (* x x))
- (define (myabs x)
- (if (< x 0) (- x) x))
- (define (good-enough oguess nguess)
- (< (/ (myabs (- (square oguess) (square nguess))) (square oguess)) 0.001))
- (define (average x y)
- (/ (+ x y) 2))
- (define (improve guess x)
- (average guess (/ x guess)))
- (define (sqrt-iter oguess nguess x)
- (if (good-enough oguess nguess)
- nguess
- (sqrt-iter nguess (improve nguess x) x)))
- (define (sqrt x)
- (sqrt-iter x 1.0 x))
练习1.8
- (define (square x) (* x x))
- (define (cube x) (* x x x))
- (define (myabs x)
- (if (< x 0) (- x) x))
- (define (good-enough oguess nguess)
- (< (/ (myabs (- (cube oguess) (cube nguess))) (cube oguess)) 0.001))
- (define (improve guess x)
- (/ (+ (/ x (square guess)) (* 2 guess)) 3))
- (define (cube-root-iter oguess nguess x)
- (if (good-enough oguess nguess)
- nguess
- (cube-root-iter nguess (cube-improve nguess x) x)))
- (define (cube-root x)
分享到:
相关推荐
- **1.1.7 示例:使用牛顿法求平方根**: 通过一个实际的例子展示如何实现数学算法。 - **1.1.8 过程作为黑盒抽象**: 强调过程的封装性和模块化设计的重要性。 - **1.2 由过程生成的过程及其产生的过程** - **...
- **1.1.7 示例:使用牛顿法求平方根**(Example: Square Roots by Newton's Method):通过一个具体的数学问题展示如何设计算法。 - **1.1.8 过程作为黑盒抽象**(Procedures as Black-Box Abstractions):强调...
- **1.1.7 示例:牛顿法求平方根**: 通过实例讲解迭代方法。 - **1.1.8 将过程作为黑盒抽象**: 强调过程的封装性和独立性。 - **1.2 由过程生成的过程** - **1.2.1 线性递归与迭代**: 比较两种不同类型的递归...
- **1.1.7 示例:牛顿法求平方根**:通过一个具体的数学问题来展示如何使用程序解决实际问题。 - **1.1.8 将过程视为黑盒抽象**:讨论将过程视为独立实体的重要性,以及这种抽象对程序设计的意义。 - **1.2 过程...