E = 1/0!+1/1!+1/2!+1/3!......
我写了这样的代码,但不管我输入什么,它只返回2 .... 你能帮帮我吗?
(define (fact n)
(if (= n 0)
1
(* n (- n 1))))
(define (e limit)
(if (= limit 0)
1
(+ (/ 1 (fact limit)) (e (- limit 1)))))
答案 0 :(得分:2)
fact
程序中存在错误:
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1))))) ; you forgot to recursively call `fact`
彻底测试每个程序,一个简单的单元测试就会发现问题出在fact
而不是e
程序中。
答案 1 :(得分:1)
请告诉我,这不是为了你的功课,你只是在修补Scheme。 :)
对于2
的任何输入,我都没有e
。除e
之外,0
的任何输入都会出现除零错误。
除此之外,fact
还有一个明显的问题。也许括号绊倒了你,你已经盯着这个太久了:
(define (fact n)
(if (= n 0)
1
(* n (- n 1))))
......应该是:
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))
请记住,如果没有调用自身的函数,就无法实现递归函数。
这可以解决您的问题。
这些天可能没有TA可以帮助这么快,但如果这是为了你的功课,你需要努力将你遇到的问题分解为最简单的元素,以便在更多的编程中生存,这只会变得更加困难。特别是在这种情况下,您需要停下来询问fact
所依赖的e
是否真的有效,发现它没有,并从那里开始。