SiCP 练习 1.45

问题描述 投票:0回答:1
(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)
时,它什么也没输出。为什么递归无法停止?

scheme higher-order-functions sicp
1个回答
0
投票

我将

1
中的参数
nth-root
更改为
1.0
,然后就可以了。

为什么它们不同?

© www.soinside.com 2019 - 2024. All rights reserved.