【问题标题】:JavaScript recursive function returning NaN返回 NaN 的 JavaScript 递归函数
【发布时间】:2016-03-01 23:14:51
【问题描述】:

如果为s!=0 调用下面的JavaScript 函数nuovaX,则返回NaN。我怎样才能摆脱它?

function d(s,di,dd){
    var ris=di*Math.pow(dd,s);
    return ris;
}

function nuovaX(s,di,dd,angolo,xi){
    var x=0;
    if(s==0){
        x=xi;       
    }
    else{
        x=nuovaX(s-1,di,dd,angolo)+d(s,di,dd)*Math.cos(s*angolo);
    }
    return x;
}

【问题讨论】:

  • 你能创建一个我们可以测试它的小提琴吗?
  • 至少,我们需要查看样本调用及其预期结果。
  • 显然是一个不受欢迎的意见,但我不同意反对票 - 我明白为什么@Leonardo Mutti 在这种情况下觉得不需要提供任何额外信息。该函数返回 NaN - 这意味着发生了一些无效的数学运算,因此不需要额外的上下文。
  • @GershomMaes 虽然我们现在知道原因,但传递给函数的参数可能会导致错误,但在s 的情况下不会检查这些参数是0。例如,如果在将angolo 参数设置为"foo"null 的情况下调用该函数,则该函数将同样失败。 (现在,这值得 4 票否决吗?可能不。)
  • 我只是假设参数不是问题的一部分——它似乎是隐含的。也许值得明确说明:P

标签: javascript function recursion nan


【解决方案1】:

稍微简化一下:

function d(s, di, dd){
    return di * Math.pow(dd, s);
}

function nuovaX(s, di, dd, angolo, xi){
    if(s==0) return xi;
    return nuovaX(s-1, di, dd, angolo) + d(s, di, dd) * Math.cos(s * angolo);
}

nuovaX 需要 5 个参数,但它对自身的递归调用只接收 4 个参数 - 缺少 xi

【讨论】:

    【解决方案2】:

    这里缺少xi

    x=nuovaX(s-1,di,dd,angolo)+d(s,di,dd)*Math.cos(s*angolo);
                            /\
                            /\
    

    所以在第二次迭代中xiundefined

    【讨论】:

      猜你喜欢
      • 2011-01-22
      • 2014-01-22
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多