首页 > 解决方案 > 使用do循环近似欧拉数(方案)

问题描述

我正在尝试使用 Scheme 中的 do 循环来计算和近似欧拉数

有些事情不太正确,因为没有显示任何内容。有人可以帮我找到下面代码的修复程序吗?谢谢。

(define (factorial n)
  (cond
    ((= n 0)1)
    ((* n(factorial(- n 1)))))) 

; using a do loop, I want to calculate 1/0! + 1/1! + 2/2! + 3/3!...
(define (ei n)
  (define sum 0)

  (do ((i 0 (+ 1 i)))
     ((> i n)) 
     (+ sum (/ 1.(factorial i)))))



(ei 6)

我预计数字接近 2.7

标签: schemeracket

解决方案


您需要更新 sum 变量并返回其值:

(define (factorial n)
  (cond
    ((= n 0) 1)
    ((* n (factorial (- n 1)))))) 

(define (ei n)
  (define sum 0)

  (do ((i 0 (+ 1 i)))
     ((> i n))
     (set! sum (+ sum (/ 1. (factorial i)))))

  sum)

(ei 6)

这导致2.7180555555555554.


推荐阅读