(define tolerance 0.00001)
(define (fixed-point f first-guess)
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))
(define (average v1 v2)
(/ (+ v1 v2) 2))
(define (average-damp f)
(lambda (x)
(average x (f x))))
(define (compose f g)
(lambda (x)
(f (g x))))
(define (repeated f n)
(cond ((= n 1)
f)
(else
(compose
f
(repeated f (- n 1))))))
(define (log2 x)
(/ (log x) (log 2)))
(define (nth-root n x)
(fixed-point
((repeated average-damp (floor (log2 n)))
(lambda (y) (/ x (expt y (- n 1)))))
1))
除了
nth-root
之外的所有程序在之前的练习中都表现良好
我找不到哪里错了
当我输入
(nth-root 2 9)
时,它输出3.00...
但是当我输入(nth-root 3 8)
时,它什么也没输出。为什么递归无法停止?
我将
1
中的参数nth-root
更改为1.0
,然后就可以了。
为什么它们不同?