scheme - 方案中的莱布尼茨公式

标签 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))))))

最佳答案

基本情况不正确。我们可以稍微清理一下代码:

(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

关于scheme - 方案中的莱布尼茨公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39564210/

相关文章:

scheme - 在 Scheme 中检查对象是否为 "listdiff"

scheme - sicp cons-stream 是如何实现的?

asynchronous - Scheme中的CSP风格异步编程(CHICKEN)

lisp - 简单的计划。第 8 章高阶函数

list - 方案将条目转换为列表

haskell - 调用/抄送实现?

Racket:记录到文件

concurrency - Racket 中的管道与异步 channel

scheme - 方案中的随机函数

Scheme/DrRacket - 带 foldr 的 map 功能