返回NaN的JavaScript递归函数
如果为返回NaN的JavaScript递归函数,javascript,function,recursion,nan,Javascript,Function,Recursion,Nan,如果为s!调用下面的JavaScript函数nuovaX,则返回NaN=0。我怎样才能摆脱这个 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,ango
s!调用下面的JavaScript函数nuovaX
,则返回NaN
=0
。我怎样才能摆脱这个
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;
}
这里缺少
xi
:
x=nuovaX(s-1,di,dd,angolo)+d(s,di,dd)*Math.cos(s*angolo);
/\
/\
所以在第二次迭代中,xi是
未定义的
将其简化了一点:
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
您可以创建一个小提琴来测试它。至少,我们需要看到示例调用及其预期结果。显然这是一个不受欢迎的观点,但我不同意反对票——我明白为什么@Leonardo Mutti觉得没有必要在这个案件中提供任何额外的信息。函数正在返回NaN-这意味着发生了一些无效的数学运算,因此不需要额外的上下文。@GershomMaes虽然我们现在知道了原因,但传递给函数的参数可能会导致错误,但在s
为0
的情况下不会检查这些参数。例如,如果调用函数时将angolo
参数设置为“foo”
或null
,则函数也会失败。(现在,这值四张反对票吗?可能不值得。)我只是假设参数不是问题的一部分——它似乎是隐含的。也许有必要明确指出:P