2

e=1/0!+1/1!+1/2!+1/3!……</p>

我写了这样的代码,但无论我输入什么,它都只返回 2.... 你能帮我吗?

 (define (fact n)
        (if (= n 0)
            1
            (* n (- n 1))))

    (define (e limit)
            (if (= limit 0)
                1
                (+ (/ 1 (fact limit))  (e (- limit 1)))))
4

2 回答 2

2

过程中有一个错误fact

(define (fact n)
  (if (= n 0)
      1
      (* n (fact (- n 1))))) ; you forgot to recursively call `fact`

彻底测试每个程序,一个简单的单元测试就会发现问题出在程序中fact而不是在e程序中。

于 2013-02-12T03:16:48.817 回答
1

请告诉我,这不是你的作业,你只是在修补 Scheme。:)

我没有得到2任何输入ee对于除此之外的任何输入,我都会得到除零错误0

撇开这些不谈,你在fact. 也许括号把你绊倒了,你已经盯着这个太久了:

(define (fact n)
    (if (= n 0)
        1
        (* n (- n 1))))

...应该:

(define (fact n)
    (if (= n 0)
        1
        (* n (fact (- n 1)))))

请记住,您不能实现递归函数……没有函数调用自身。

这应该可以解决您的问题。

也许现在 TA 不能这么快地提供帮助,但如果这是为了你的家庭作业,你需要努力将你遇到的问题分解为最简单的元素,以便在更多的编程中生存下来,这只会变得更加困难。特别是在这种情况下,您需要停下来询问是否确实有效,取决于facte是否确实有效,然后发现它没有,然后从那里开始。

于 2013-02-12T03:23:27.513 回答