计划中的莱布尼兹公式

时间:2016-09-19 01:30:22

标签: scheme racket

我花了一些时间在这里和整个互联网上查看有关此问题的问题,但我找不到任何对我有意义的事情。 基本上我需要帮助实现方案中的函数,当你给它一个值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))))))

1 个答案:

答案 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