使用 do 循环(方案)的欧拉数近似



我正在尝试使用方案中的 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

您需要更新 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.

利用do循环可以更新多个变量的事实。

(define (factorial n)
(cond
((= n 0) 1)
((* n (factorial (- n 1)))))) 
(define (ei n)
(do ((i   0   (+ 1 i))
(sum 0.0 (+ sum (/ 1. (factorial i)))))
((> i n) sum)))

最新更新