【问题标题】:Scheme / Drracket Euler Number方案 / Drracket 欧拉数
【发布时间】:2018-08-22 00:13:49
【问题描述】:

我正在尝试在 drracket aka Scheme 中实现欧拉数。 我通过搜索功能看到了一个解决方案,但它很复杂。

 (define (fakultät n)
  (cond
    [(= n 0) 0]
    [(= n 1) 1]
    [else (* (fakultät (- n 1)) n)]))
(define (e n)
  (cond
    [(= n 0) 1]
    [(= n 1) 2.72]
    [else (+ (/ 1 (fakultät n )) (e(- n 1)))]))

首先我定义了一个阶乘,然后我定义了 e 函数。 结果不知何故不正确

【问题讨论】:

    标签: math functional-programming scheme racket eulers-number


    【解决方案1】:

    旁注您确实应该在您的问题中提供更多详细信息,例如输入和实际输出是什么(通常是预期输出,但在这种情况下它有点像明确)

    我认为错误在于该行

    [(= n 1) 2.72]
    

    我不确定你从哪里得到这条线。我唯一的猜测是,这是基于某种近似方法的其他一些实现的遗留物。 e 大约是 2.718... 所以 2.72 单独大于正确答案,您将添加更多 1/n!

    如果您删除该行,代码似乎可以正常工作,如您所见 here

    【讨论】:

    • 非常感谢您的回答。因此,我尝试了您的 (e 1) 版本并对其进行了评估。结果是两个。我也试过(e 3),但结果仍然不是预期的。你能告诉我你有什么输入,所以结果是 2.71
    • @AzadKygn,我认为第一个问题是:你了解这段代码背后的算法吗?为什么它有 n 作为参数?
    • 是的,谢谢你,这是一个愚蠢的问题@SergGr。 n 越高,我们的电子编号就越精确,因为它是一个永无止境的行
    • @AzadKygn,很高兴你解决了这个问题。我认为现在也应该很明显为什么该行是初始错误的来源。附言顺便说一句,如果关于 SO 的某些答案对您有帮助,则习惯上接受该答案。
    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2016-10-30
    相关资源
    最近更新 更多