我花了一些时间在这里和整个互联网上查看有关此问题的问题,但我找不到任何对我有意义的事情。 基本上我需要帮助实现方案中的函数,当你给它一个值k时,评估莱布尼兹的公式。您输入的值使函数知道它应该计算的系列中有多少个值。这就是我到目前为止所做的,我不知道我需要用什么方式编写这个程序才能使它工作。谢谢!
(define (fin-alt-series k)
(cond ((= k 1)4)
((> k 1)(+ (/ (expt -1 k) (+(* 2.0 k) 1.0)) (fin-alt-series (- k 1.0))))))
答案 0 :(得分:3)
基本情况不正确。我们可以稍微清理一下代码:
(define (fin-alt-series k)
(cond ((= k 0) 1)
(else
(+ (/ (expt -1.0 k)
(+ (* 2 k) 1))
(fin-alt-series (- k 1))))))
更好的是,我们可以重写使用尾递归的过程,这样会更快:
(define (fin-alt-series k)
(let loop ((k k) (sum 0))
(if (< k 0)
sum
(loop (- k 1)
(+ sum (/ (expt -1.0 k) (+ (* 2 k) 1)))))))
例如:
(fin-alt-series 1000000)
=> 0.7853984133971936
(/ pi 4)
=> 0.7853981633974483