簡體   English   中英

計划語言中的遞歸調用

[英]Recursive call in Scheme language

我正在閱讀sicp,有一個問題(練習1.29),我編寫了一個scheme函數來解決該問題,但似乎該函數的遞歸調用得到了錯誤的答案。 對我來說真的很奇怪。 代碼如下:

(define simpson
  (lambda (f a b n)
    (let ((h (/ (- b a) n))
          (k 0))
      (letrec
          ((sum (lambda (term start next end)
                  (if (> start end)
                      0
                      (+ (term start)
                         (sum term (next start) next end)))))
           (next (lambda (x)
                   (let ()
                     (set! k (+ k 1))
                     (+ x h))))
           (term (lambda (x)
                   (cond
                     ((= k 0) (f a))
                     ((= k n) (f b))
                     ((even? k) (* 2
                                   (f x)))
                     (else (* 4
                              (f x)))))))
        (sum term a next b)))))

我沒有得到正確的答案。

例如,如果我嘗試像這樣調用simpson函數:

(simpson (lambda (x) x) 0 1 4)

我希望得到6,但是它又返回了10,我不確定錯誤在哪里。在我看來,Simpson函數內部定義的函數“ sum”不正確。

如果我使用迭代而不是遞歸的方式在辛普森內部重寫sum函數,那么我會得到正確的答案。

您需要將總和乘以h/3

 (* 1/3 h (sum term a next b))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM