方案中的迭代窦功能

时间:2016-10-14 08:46:44

标签: function math scheme racket

所以,我最近开始通过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错误。 如果有人可以看看,我会非常感激。

1 个答案:

答案 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=1res=0, ctr=1。在后一种情况下,初始化res=x, ctr=2和计算fac=1以便newfac = fac*(i-1)*i也没有问题。