所以,我最近开始通过DrRacket学习方案,我必须为 sinus 编写一个迭代函数。这是我到目前为止所得到的:
(define (calc-sin x n)
(define (iter ctr res fac xpow sign)
(if (>= ctr n)
res
(let* ((i (- (* 2 ctr) 1))
(newfac (* fac i (+ i 1)))
(newxpow (expt x i))
(newsign (- sign)))
(iter (+ ctr 1)
(+ res (/ (* newsign newxpow) newfac))
newfac
newxpow
newsign))))
(iter 1 1 1 1 -1))
代码运行,但每次我尝试插入一个值时,我得到错误的答案,一旦我尝试编辑我的答案,我就会收到bad syntax
错误。
如果有人可以看看,我会非常感激。
答案 0 :(得分:0)
如果要迭代
会更容易$(".child2").filter(function() {
return $(this).children().length === $(this).children().filter(':hidden').length;
}).parent().hide();
避免了阶乘中的溢出问题,并且计算效率更高。
但更直接的问题是,在您需要newterm = -term *x*x / (i*(i+1))
newres = res+newterm
时,您使用的阶乘是(2*ctr)!
。
您可以重新组织代码,使(2*ctr-1)!
为fac
,(2*ctr-1)!
的结果为newfac
,即(2*ctr+1)!
。
下一个问题:您从fac*(i+1)*(i+2)
开始,它应该是res=1
或res=0, ctr=1
。在后一种情况下,初始化res=x, ctr=2
和计算fac=1
以便newfac = fac*(i-1)*i
也没有问题。