pvd*_*pvd 2 lisp scheme sicp racket
我对SICP 1.37的迭代解决方案是
(define (con-frac n d k)
  (define (iter i result)
    (if (= 1 i)
        result
        (iter (- i 1) (/ (n i) (+ (d i) result)))))
  (iter k (/ (n k) (d k))))
(con-frac (lambda (i) 1.0) (lambda (i) 1.0) 11)
(define (euler-d i)
  (if (= 2 (remainder i 3))
      (* (/ 2 3) (+ i 1))
      1))
(define (e)
  (+ 2 (con-frac (lambda (i) 1.0) euler-d 9)))
(e)
它返回:
Run Code Online (Sandbox Code Playgroud)Welcome to DrRacket, version 5.2.1 [3m]. Language: SICP (PLaneT 1.17); memory limit: 128 MB. 0.6180555555555556 2.39221140472879
它应该是返回:
Run Code Online (Sandbox Code Playgroud)Welcome to DrRacket, version 5.2.1 [3m]. Language: SICP (PLaneT 1.17); memory limit: 128 MB. 0.6180555555555556 2.718283582089552
我不知道我的解决方案有什么问题.
你是一个人iter.
在
  (define (iter i result)
    (if (= 1 i)
        result
        (iter (- i 1) (/ (n i) (+ (d i) result)))))
更改(= 1 i)到(= 0 i.
  (define (iter i result)
    (if (= 0 i)
        result
        (iter (- i 1) (/ (n i) (+ (d i) result)))))
phi由于所有分子和分母都相等,因此使用测试不会发现这种情况.