[英]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.